如何获得轨道球的位置

时间:2015-07-07 18:18:49

标签: opengl

我试图在我的opengl应用程序中获取围绕空闲对象旋转的球体的位置。这就是我执行轨道运行的方式:

            glTranslatef(positions[i].getPosX(), //center of rotation (yellow ball)
                           positions[i].getPosY(),
                           positions[i].getPosZ());
            glRotatef(rotation_angle,0.0,1.0,0.0); //angle of rotation
            glTranslatef(distance[i].getPosX(), //distance from the center of rotation
                           distance[i].getPosY(),
                           distance[i].getPosZ());

变量 rotation_angle 无休止地从0到360循环。在距离矢量中,我只改变物体的z距离,例如,假设空闲物体在(0,0,0)中,距离矢量可以是(0,0,200) 。

1 个答案:

答案 0 :(得分:2)

OpenGL只是吸引人的东西。它没有维持“场景”。所以你必须自己做所有的数学运算。这就像将矢量(0,0,0,1)与当前模型视图 - 投影矩阵相乘并执行视口重新映射一样简单。这已经方便地打包在GLU(非OpenGL)函数gluProject中。

由于您正在使用(旧的和已破坏的)固定功能管道,因此程序遵循

GLdouble x,y,z;
GLdouble win_x, win_y, win_z;
GLdouble mv[16], prj[16];
GLint vp[4];
glGetDoublev(GL_MODELVIEW_MATRIX, mv);
glGetDoublev(GL_PROJECTION_MATRIX, prj);
glGetInteger(GL_VIEWPORT, vp);
gluProjection(x,y,z, mv, prj, vp, win_x, win_y, win_z);

请注意,由于OpenGL的有状态特性,在绘制球体时,模型视图和投影矩阵以及视口的值很重要。在任何其他时刻检索这些值可能会产生非常不同的数据,并导致结果与图形不一致。