所以我对C ++很陌生,我现在正在大学学习它。
我开始使用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.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个点。
但我觉得它非常冗余,每对坐标的代码几乎相同,可能会简化。
我尝试用循环做但我失败了,我现在很好奇如何使这更简单,更少冗余
答案 0 :(得分:2)
can you fill in the blank here for the for-loop to run exactly four times?
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();
}
答案 1 :(得分:0)
也许是这样的?
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();
}
答案 2 :(得分:0)
我想到的第一件事就是重用变量。而不是每次都声明两个变量,而不是每次都覆盖它们。然而,甚至有更好的方法。您可以直接在rand_FloatRange(-0.75, 0.75)
的调用中使用glVertex2f(x, y)
,使其看起来像这样
glVertex2f(rand_FloatRange(-0.75, 0.75), rand_FloatRange(-0.75, 0.75))
函数的评估与数学函数非常相似。我的意思是,在这种情况下,首先评估括号内的事物。这里调用rand_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));
}
这在c ++世界中非常普遍,而且在整个编程世界中也是如此。如果你想制作更多或更少的随机点,只需将循环控制变量从4改为你想要的点数。