0

我创建了一个沿 z 轴移动多个立方体的函数。我可以让所有立方体一次移动并重复,但我试图让每个单独的立方体独立于另一个移动。我的 z 轴功能是:

void moveCubes()
{
    cubeZ += 0.050f;
        if(cubeZ > 120)
    cubeZ -= 110.0f;
    glutPostRedisplay();
}

显示功能为:

void myDisplay()
{

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
for(int i = 0; i < maxCubes; i++)
{
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -110);
    glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeZ);
    glRotatef(rotateAxis, cubeOrigins[i].rotateX, cubeOrigins[i].rotateY, 0.0f);
    drawCubes();
}

moveCubes();
glutSwapBuffers();

}

cubeZ 在我的代码顶部定义,是:

GLfloat cubeZ = 0.0;

cubeOrigins[i].x 和 .y 是生成的 rands()。如果需要,我可以添加更多代码,但我相信这是重要的部分。我希望有人能告诉我我需要做什么。坦率地说,它变得非常令人沮丧。我很感激任何帮助。

4

1 回答 1

2

您已经为所有立方体硬编码了一个恒定的 Z 位置。您可能想cubeOrigins[i].z改用。如果您的结构中没有这样的值,也许您应该(并将其随机化为与您的 x 和 y 值相同)。

更新时:

void moveCubes() {
    for( int i = 0; i < maxCubes; i++ ) {
        cubeOrigins[i].z += 0.05f;
        if( cubeOrigins[i].z > 120 )
            cubeOrigins[i].z -= 110.0f;
    }
    glutPostRedisplay();
}

而且当然:

glTranslatef(cubeOrigins[i].x, cubeOrigins[i].y, cubeOrigins[i].z);

如果您想获得技术,您可能还想随机化立方体的速度。因此,您可以创建一个浮点数组来表示每个立方体的速度并使用它来代替恒定0.05f速度。

于 2013-11-05T23:03:10.830 回答