Android 的 frustumM 的工作方式似乎很有趣。如果我查看 OpenGL 红皮书,生成的矩阵如下所示:
(来源:glprogramming.com)
Songho.ca 似乎同意这一点:
(来源:songho.ca)
但是,一个分量乘以 2 使用 Android 的 frustumM,而不是在其他示例矩阵中。这是它似乎正在做的事情:
一切似乎在功能上都匹配,除了第一行第三列。为什么要乘以二?下面是 android.opengl.Matrix 的 frustumM 方法中生成第三列前三个元素的代码行:
final float A = 2.0f * ((right + left) * r_width);
final float B = (top + bottom) * r_height;
final float C = (far + near) * r_depth;
r_width、r_height、r_depth 定义为:
final float r_width = 1.0f / (right - left);
final float r_height = 1.0f / (top - bottom);
final float r_depth = 1.0f / (near - far);
以“final float A”开头的行似乎错误地乘以了 2。
这是 Android 代码中的错误,还是我遗漏了什么?我知道如果平锥体是对称的,则该术语会抵消。当使用非对称平截头体运行代码时,生成的矩阵实际上是不同的,当相同的向量与那些不同的矩阵相乘时生成的向量也是不同的。
最佳答案
这是 Android 的一个错误。请看http://code.google.com/p/android/issues/detail?id=35646
关于android - 为什么Android的frustumM生成的矩阵和红皮书的不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697728/