Android平板电脑的工作方式似乎很有趣。如果我检查的OpenGL红色的书,矩阵生成这个样子的:
http://www.glprogramming.com/red/images/Image23.gif
Songho.ca似乎同意这一点:
http://www.songho.ca/opengl/files/gl_projectionmatrix_eq16.png
为什么Android平板电脑生成的矩阵与Redbook的不同?
但是,一个部件由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);
线起始与“最终浮动A”似乎错误地乘以2.
这是Android的代码中的错误,或者我只是错过了什么?我知道如果平截头体是对称的,这个术语就会被取消。当运行具有不对称平截头体的代码时,生成的矩阵实际上是不同的,并且当相同的向量与不同的矩阵相乘时所得到的向量也是不同的。