java - Frustum near plane OpenGL 使对象看起来更近,而不仅仅是剪裁

标签 java android opengl-es frustum

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

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

最佳答案

我假设改变平截头体具有描述的效果 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 坐标。

因此,当您减小 near 值时,顶点将看起来好像已根据其 Z 坐标成比例地靠近原点。当然,这种减少也会影响 X 和 Y 坐标,并且应该使对象看起来更“压缩”到中心。我想这种效果更符合我们通过使近裁剪平面更接近视点而产生的直觉预期。

关于java - Frustum near plane OpenGL 使对象看起来更近,而不仅仅是剪裁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481743/

相关文章:

java - 使用可选的空检查

java - Android 获取固定选项卡、PageViewer 来加载不同的 fragment

ios - 点积和亮度/Findmyicone

ios - 使用OpenGL和GLKit在iOS中绘制立方体

java - jboss 7.1.1 中两个 Web 应用程序的两个 DNS 名称

java - 带有嵌入式 tomcat 的 Spring Boot 在一个端口上运行,但它不起作用

android - 透明PNG图像看起来不好看

Android StreetView 检查给定位置是否有 View

android - 有没有好的方法可以在Android App上进行API检查?

iphone - OpenGL ES 平铺纹理 Mipmap 问题 - iPad/iPhone