2012-07-28 15 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),它會使事情不同。

我發現這個問題,當我檢查源代碼。嘆。

相關問題