Matrix.frustumM导致无法将近距离绘制距离设置为零的问题

时间:2014-09-24 07:14:40

标签: opengl-es

使用Matrix.frustumM设置OpenGLES绘制距离时,我注意到您无法将近距离绘制距离设置为零,任何小于1的值都会产生非常奇怪的失真。将近距离设置为1可以在大多数情况下正常工作,但是当相机靠近物体移动的距离超过此距离时,它看起来很可怕,因为它们未被绘制(或者未绘制其中的一部分)。有什么可以做的吗? 非常感谢你的时间。

1 个答案:

答案 0 :(得分:2)

实际上做不了多少。近剪裁平面和远剪裁平面将像素剪切为更接近near或更远far。除此之外,near有点特殊,因为它使用边框参数(leftrightupdown的组合定义了您的视野)。因此,如果您的四边形具有与那些边界相同的坐标,那么如果恰好是near之后将是全屏的。因此,near平面不能为零或甚至为负,例如,使用平截头体将在零单位之外的对象看起来无限缩放。

仍然可以使用小于1的值而不会产生一些奇怪的瑕疵。您应该做的是通过设置视野来查看有关如何定义frustum的一些示例。通常,您可以为其中一个尺寸(如45度宽度)定义角度(视野),然后根据需要定义nearfar,但两者都应为正。现在使用三角法使用leftright来计算anglenear,并对updown使用相同的值,但会缩放按屏幕(视图)比例。通过这样做,您在更改near参数时的失真方面没有区别。