我随机制作了很多物品,它们自行旋转。我也尝试过移动相机。相机确实向左和向右移动,向前/向后移动。问题是,如果我向后走远,我的物体会慢慢消失。
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是我旋转对象的因素,数组轴决定了对象绕哪个轴旋转。
答案 0 :(得分:1)
问题是,如果我向后走远,我的物体会慢慢消失。
您的对象被投影的远平面剪切:
投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼睛空间转换到剪辑空间,并且通过用剪辑坐标的w
分量进行划分,将剪辑空间中的坐标转换为规范化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。
每个NDC之外的几何体都被剪裁。
相机平截头体的近平面和远平面之间的物体是NDC的范围(-1,1)。
正交剪辑空间
在Orthographic Projection中,眼睛空间中的坐标线性映射到标准化设备坐标。
透视剪辑空间
在Perspective Projection中,投影矩阵描述了从针孔相机到视口的2D点看世界中3D点的映射。
相机平截头体(截头金字塔)中的眼睛空间坐标被映射到立方体(标准化设备坐标)。