C ++写得不好的函数,不知道如何简化它[初学者]

时间:2015-10-26 00:50:12

标签: c++ function opengl methods

所以我对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个点。

但我觉得它非常冗余,每对坐标的代码几乎相同,可能会简化。

我尝试用循环做但我失败了,我现在很好奇如何使这更简单,更少冗余

3 个答案:

答案 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改为你想要的点数。