webgl - 旋转相机时对象消失

时间:2017-12-29 10:55:54

标签: camera rotation webgl coordinate-transformation

我随机制作了很多物品,它们自行旋转。我也尝试过移动相机。相机确实向左和向右移动,向前/向后移动。问题是,如果我向后走远,我的物体会慢慢消失。

mat4.identity(mvMatrix); 

mat4.rotate(mvMatrix, degToRad(-pitch), [0, 0, 1]);
mat4.rotate(mvMatrix, degToRad(-yaw), [0, 1, 0]);

mat4.translate(mvMatrix, [-xPosition, -yPosition, -zPosition]);

我按下某个键时计算俯仰和偏航。在我执行以下代码后,我绘制了对象。你觉得怎么回事?我开始画这样的物体:

mvPushMatrix();     
mat4.translate(mvMatrix, [this.x, this.y, this.z]);
mat4.rotate(mvMatrix, degToRad(this.rotation), [this.axis[0], this.axis[1], this.axis[2]]);

this.x,this.y,this.y是我绘制对象的位置。 this.rotation是我旋转对象的因素,数组轴决定了对象绕哪个轴旋转。

1 个答案:

答案 0 :(得分:1)

  

问题是,如果我向后走远,我的物体会慢慢消失。

您的对象被投影的远平面剪切:

投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼睛空间转换到剪辑空间,并且通过用剪辑坐标的w分量进行划分,将剪辑空间中的坐标转换为规范化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。
每个NDC之外的几何体都被剪裁。

相机平截头体的近平面和远平面之间的物体是NDC的范围(-1,1)。


正交剪辑空间

在Orthographic Projection中,眼睛空间中的坐标线性映射到标准化设备坐标。

enter image description here


透视剪辑空间

在Perspective Projection中,投影矩阵描述了从针孔相机到视口的2D点看世界中3D点的映射。
相机平截头体(截头金字塔)中的眼睛空间坐标被映射到立方体(标准化设备坐标)。

enter image description here