我有一个程序,我在其中跟踪用户的位置并设置平截头体(将相机设置在用户的位置)以根据用户的位置改变场景的视角。到目前为止,我的显示屏的四个角都在同一个 z 轴上,并且我能够设置非对称平截头体并根据用户的视角改变场景。
当前代码如下所示:
UserCam::begin(){
saveGlobalMatrices();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(_topLeftNear.x, _bottomRightNear.x, _bottomRightNear.y, _topLeftNear.y, _camZNear, _camZFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(_wcUserHead.x, _wcUserHead.y, _topLeftScreen.z, _wcUserHead.x, _wcUserHead.y, _topLeftScreen.z-1, 0, 1, 0);
}
UserCam::end(){
loadGlobalMatrices();
}
UserCam::setupCam(){
this->_topLeftScreen = _wcTopLeftScreen - _wcUserHead; //wcTopLeftScreen, wcBottomRightScreen and wcUserHead are in the same frame of reference
this->_bottomRightScreen = _wcBottomRightScreen - _wcUserHead;
this->_topLeftNear = (_topLeftScreen/ _topLeftScreen.z) * _camZNear;
this->_bottomRightNear = (_bottomRightScreen/_bottomRightScreen.z )) * _camZNear;
}
但是,我希望能够对保持向用户倾斜和/或所有顶点都不相同的显示器执行相同的操作Z
。
以上可以想象为一种倾斜的窗口,其顶点将具有从用户位置定义的平截头体。在显示器没有所有顶点的情况下,这样的截头锥怎么可能Z
?
编辑
我正在考虑的设置中有三架飞机。中间的一个给出了正确的非对称平截头体,因为所有顶点都在同一个 Z 上,而左右平面有两个顶点,每个顶点都在不同的 Z 上。相同的顶点如下:
Plane1: TL : (-426.66, 0, 200), TR: (0, 0, 0), BL : (-426.66, 320.79, 200), BR : (0, 320.79, 0)
Plane2: TL : (0, 0, 0), TR: (426.66, 0, 0), BL : (0, 320.79, 0), BR: (426.66, 320.79, 0)
Plane3: TL: (426.66, 0, 0), TR: (853.32, 0, 200), BL : (426.66, 320.79, 0), BR : (853.32, 320.79, 200)