平面OpenGL附近的Frustum使对象看起来更近,而不仅仅是剪裁

时间:2014-05-05 20:57:51

标签: java android opengl-es frustum

在openGles中减少平面附近的平截头体(如您所见here)使对象看起来更近。我来自3d,例如在Vray,更改近剪裁平面不会修改距离,只是剪辑一些几何体。

为什么改变平截头体的近平面会使物体看起来更近?

1 个答案:

答案 0 :(得分:1)

我假设更改视锥体具有描述here.

的效果

所以根据文档,当你调用这个函数时

void glFrustum(GLdouble  left,  GLdouble  right,  GLdouble  bottom,  GLdouble  top,  GLdouble  nearVal,  GLdouble  farVal);

您正在做的是将当前投影矩阵乘以从参数中指定的值构建的矩阵。

如果你看看如何构建矩阵,你会发现它与缩放矩阵非常相似。 3,3处的元素(在文档页面中名称为C)等于-(far+near)/(far-near)。这意味着,如果您减少near并保持far不变,则C将接近于零。当矩阵乘法发生时,这将起到缩小Z坐标的作用。

因此,当您减小近似值时,顶点将显示为好像它们与Z坐标成比例地接近原点。当然,这种减小也会影响X和Y坐标,并且应该使对象看起来更加“压缩”到中心。我猜这种效果与我们直观地期望将近剪裁平面更接近视角的方式更为一致。