如下图所示。
用户通过改变分别对应于右,左,上,下,近,远运动的x,y,z坐标来移动球。但是当我们将相机从位置A更改为位置B时,事情看起来很奇怪。右边看起来不再正确,因为球仍然在图像中前一个z所示的先前坐标系中移动。如何让球在这样的距离内移动,以至于更换相机不会影响它们的位移。
简单示例:如果我们将摄像机放置在正X轴上,则z坐标值的变化现在看起来像是左右移动。但实际上,改变z应该是近在咫尺的。
答案 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是根据相机改变的新坐标。