2012-07-28 34 views
6

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的代码中的错误,或者我只是错过了什么?我知道如果平截头体是对称的,这个术语就会被取消。当运行具有不对称平截头体的代码时,生成的矩阵实际上是不同的,并且当相同的向量与不同的矩阵相乘时所得到的向量也是不同的。

回答

1

((我preffer只是发表评论,但我不能。))

谢谢你们的见解。我刚做了之后

Matrix.frustrumM(mMyMatrix, ...)

为了解决我的纵横比的问题:)添加

mMyMatrix[8] /= 2f; 

1

是,如果调用的函数(-ratio,比, - 1,1,1,10)参数设置,它不会引起问题,但如果您调用(right!= -1 * left),它会使事情不同。

我发现这个问题,当我检查源代码。叹。

相关问题