繁体   English   中英

围绕另一个对象旋转对象

[英]Rotate object around another object

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

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

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

并提供图片以帮助:

在此输入图像描述

在此输入图像描述

请启用深度测试以隐藏超出其他对象的对象。 为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();

你想做的是中等复杂。

我知道在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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM