关于Android的截头模式的工作原理似乎很有趣.如果我查看OpenGL红皮书,生成的矩阵如下所示:
http:
//www.glprogramming.com/red/images/Image23.gif Songho.ca似乎同意这一点:http:
//www.songho.ca /opengl/files/gl_projectionmatrix_eq16.png
但是,一个组件乘以Android的frustumM乘以2,而不是在其他示例矩阵中.这是它似乎正在做的事情:
除了第一行,第三列外,一切似乎都在功能上匹配.为什么要乘以2?这是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;
Run Code Online (Sandbox Code Playgroud)
使用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);
Run Code Online (Sandbox Code Playgroud)
以"final float A"开头的行似乎错误地乘以2.
这是Android代码中的错误,还是我错过了什么?我知道如果平截头体是对称的,那么该术语就会取消.当运行具有不对称平截头体的代码时,生成的矩阵实际上是不同的,当相同的向量与那些不同的矩阵相乘时,所得到的向量也是不同的.
归档时间: |
|
查看次数: |
2324 次 |
最近记录: |