C++;写得不好的函数,don';I don’我不知道如何简化它[初学者] 我对C++非常陌生,现在我正在UNI学习它。
我开始胡乱使用openGL,目前我正在制作不同的形状和对象以显示在屏幕上,除了一个功能外,它运行得非常好:C++;写得不好的函数,don';I don’我不知道如何简化它[初学者] 我对C++非常陌生,现在我正在UNI学习它。,c++,function,opengl,methods,C++,Function,Opengl,Methods,我开始胡乱使用openGL,目前我正在制作不同的形状和对象以显示在屏幕上,除了一个功能外,它运行得非常好: void Shape::drawRandom(void) { glEnable(GL_POINT_SMOOTH); glPointSize(5.0); glColor3ub(255, 0, 0); glBegin(GL_POINTS); //v1 float x1 = rand_FloatRange(-0.75, 0.75); float y2 = rand_FloatRange(-0
void Shape::drawRandom(void) {
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255, 0, 0);
glBegin(GL_POINTS);
//v1
float x1 = rand_FloatRange(-0.75, 0.75);
float y2 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x1, y2);
//v2
float x3 = rand_FloatRange(-0.75, 0.75);
float y4 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x3, y4);
//v3
float x5 = rand_FloatRange(-0.75, 0.75);
float y6 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x5, y6);
//v4
float x7 = rand_FloatRange(-0.75, 0.75);
float y8 = rand_FloatRange(-0.75, 0.75);
glVertex2f(x7, y8);
glEnd();
}
基本上,该函数获取两个随机浮点值(在不同的函数中生成),并将它们设置为顶点(点)的x任意y值,并显示它们
基本上用随机坐标在屏幕上画4个点
但我觉得这是非常冗余的,每对坐标的代码几乎相同,可能可以简化
我试着用一个循环来做,但是我失败了,我很好奇现在如何使这个更简单和更少冗余的
< P>你可以在这里填空for for循环精确地运行四次吗?< /P>void Shape::drawRandom(void) {
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255, 0, 0);
glBegin(GL_POINTS);
for(__________________) {
float x = rand_FloatRange(-0.75, 0.75);
float y = rand_FloatRange(-0.75, 0.75);
glVertex2f(x, y);
}
glEnd();
}
也许是这样的
void Shape::drawRandom(void)
{
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255, 0, 0);
glBegin(GL_POINTS);
for (int i = 0; i < 4; i++)
glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75));
glEnd();
}
void形状::drawRandom(void)
{
glEnable(GL_POINT_SMOOTH);
glPointSize(5.0);
glColor3ub(255,0,0);
glBegin(总分);
对于(int i=0;i<4;i++)
glVertex2f(rand_FloatRange(-0.75,0.75),rand_FloatRange(-0.75,0.75));
格伦德();
}
我想到的第一件事就是重用变量。与其每次声明两个变量,不如每次重写它们。然而,还有更好的办法。您可以在对glVertex2f(x,y)
的调用中直接使用rand\u FloatRange(-0.75,0.75)
,使其如下所示
glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75))
函数的计算方法与数学函数非常相似。我的意思是,在这种情况下,首先计算括号内的内容。这里调用的是rand\u FloatRange(a,b)
,该函数返回它应该返回的值。这两个调用在传递之前都会发生。然后将这些函数返回的值作为参数传递给glVertex2f(x,y)
,其中x和y是返回的数字。这样就完全不需要将值存储在变量中,因为它们可以立即使用。现在,您提到的for循环也很简单
for (int i = 0; i < 4; i++) {
glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75));
}
for(int i=0;i<4;i++){
glVertex2f(rand_FloatRange(-0.75,0.75),rand_FloatRange(-0.75,0.75));
}
<>这在C++世界中非常普遍,实际上是编程世界。如果您想创建更多或更少的随机点,只需将循环控制变量从4更改为您想要的点数。我想看看您在循环中尝试了什么,这样我们可以帮助您更好地理解它们。因为循环是最好的方法,而你已经找到了那部分。哦,我知道我做错了什么。出于某种原因,我把格伦也包括在内;在循环中,这就是为什么我看不到屏幕上出现任何点的原因。现在它工作得很好,非常感谢@谢谢你接受我的回答。祝你有美好的一天!