android - 为什么Android的frustumM生成的矩阵和红皮书的不一样?

标签 android opengl-es

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/

相关文章:

android - 改造:向多部分请求添加一个字符串列表参数

android - 无法添加名称为 'testTarget' 的配置,因为具有该名称的配置已存在

iphone - 无法制作完整的帧缓冲区对象 8cd6(iOS,以编程方式创建的 OpenGL View )

ios - GPUImage 自定义 OpenGL ES 着色器导致黑色图像

android - 尝试将 SQLite 数据库从数据复制到 SD 卡

java - 当应用程序在后台时 Android 服务停止

rust - 如何进行批量渲染?

java - OpenGL 纹理不遵循几何

android - 播放声音

iphone - 当我切换到仅 alpha (A8) 像素格式时,为什么我的片段着色器无法读取 alpha 信息?