我在场景中绘制了两个矩形,现在我正试图围绕另一个旋转一个矩形。
当我按下“左键”时,我的第一个矩形向另一个方向移动,但我没有旋转的效果,因为它只是沿另一个矩形方向的直线移动。
如何更改第一个矩形的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();
}
一张图片来帮助:
答案 0 :(得分:1)
请启用深度测试以隐藏超出其他对象的对象。 为far对象赋予高值z vaue。
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();
答案 1 :(得分: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。