围绕另一个对象旋转对象

时间:2013-05-26 15:22:24

标签: c opengl glut

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

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

如何更改第一个矩形的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(); 
}

一张图片来帮助:

enter image description here

enter image description here

2 个答案:

答案 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。