0

我在我的场景中画了两个矩形,现在我试图围绕另一个矩形旋转一个矩形。

当我按下“左键”时,我的第一个矩形向另一个方向移动,但我没有旋转的效果,因为它只是在另一个矩形的方向上沿直线移动。

如何更改第一个矩形的 Z 方向?

tl;dr:这就像一个太阳系,但我不明白我怎么会有深度效果。

我正在使用 GLUT 和 OpenGL。

编辑:更多信息:

这是我当前的代码(显示场景的函数):

void RenderScene(void){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor3f(1.0f, 0.0f, 0.0f); 

    glPushMatrix();

    glTranslatef(-70.0f, 0.0f, 0.0f);
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f); 
    glPopMatrix();

    glColor3f(1.0f, 1.0f, 0.0f);

    glPushMatrix();
    glTranslatef(xCor, 0.0f, 0.0f);
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f);
    glPopMatrix();

    glFlush(); 
}

还有一张可以帮助的图片:

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

请启用深度测试以隐藏其他对象之外的对象。为远处的对象赋予高值 z 值。

glEnable( GL_DEPTH_TEST );
glClear( GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

glPushMatrix();

glTranslatef(-70.0f, 0.0f, 0.0f);
glRectf(-25.0f, 25.0f, 25.0f, -25.0f); 
glPopMatrix();

glColor3f(1.0f, 1.0f, 0.0f);

glPushMatrix();
glTranslatef(xCor, 0.0f, 0.0f);
glRectf(-25.0f, 25.0f, 25.0f, -26.0f); // Z value of behind object is set far from eye
glPopMatrix();
于 2013-05-26T18:46:43.930 回答
1

你想做的事情比较复杂。

我知道在 3 空间中定位矩形的唯一方法是使用 glVertex3f() 构建它们,如下所示:


glBegin(GL_QUADS);  
    glVertex3f(x0, y0, z0);  
    glVertex3f(x1, y1, z1);
    glVertex3f(x2, y2, z2);  
    glVertex3f(x3, y3, z3);  
glEnd();

您的“太阳系”必须位于屏幕坐标中:X-> 左/右,Y-> 上/下,Z-> 进/出屏幕。要创建轨道效果,您必须为每个移动增量重新计算所有四个 X 和 Z。

如果您想查看不同的视图,我还建议使用 gluLookAt()。

glPerspective() 的手册页说 zNear 始终为正数,但您给了它一个负数。在我看到一些轨道之前,我会将该行注释掉。

HTH。

于 2013-05-26T21:09:12.473 回答