如何根据OpenGL中的摄像头移动对象。

时间:2014-03-07 23:03:39

标签: opengl graphics camera transformation

如下图所示。   3D Ball

用户通过改变分别对应于右,左,上,下,近,远运动的x,y,z坐标来移动球。但是当我们将相机从位置A更改为位置B时,事情看起来很奇怪。右边看起来不再正确,因为球仍然在图像中前一个z所示的先前坐标系中移动。如何让球在这样的距离内移动,以至于更换相机不会影响它们的位移。

简单示例:如果我们将摄像机放置在正X轴上,则z坐标值的变化现在看起来像是左右移动。但实际上,改变z应该是近在咫尺的。

1 个答案:

答案 0 :(得分:1)

我想我会在这里回答:

我通过简单地将凸轮模型视图矩阵乘以球坐标来解决它。

以下是代码:

   glGetDoublev( GL_MODELVIEW_MATRIX, cam );
     matsumX=cam[0]*tx+cam[1]*ty+cam[2]*tz+cam[3];
     matsumY=cam[4]*tx+cam[5]*ty+cam[6]*tz+cam[7];
     matsumZ=cam[8]*tx+cam[9]*ty+cam[10]*tz+cam[11];

其中tx,ty,tz是球的原始坐标,而matsumX,matsumY,matsumZ是根据相机改变的新坐标。