2012-07-28 3 views
6

Coś wydaje się zabawne w sposobie działania frustumM Androida. Gdybym sprawdzić czerwona książka OpenGL, matryca generowane wygląda następująco:
http://www.glprogramming.com/red/images/Image23.gif
Songho.ca wydaje się zgodzić z tym:
http://www.songho.ca/opengl/files/gl_projectionmatrix_eq16.png
Dlaczego matryca wygenerowana przez system plików cookie na Androida różni się od Redbooki?

Jednak jeden składnik jest mnożona przez 2 z Android frustumM i nie w innych przykładowych matrycach. Oto, co wydaje się robić:

Wszystko wydaje się funkcjonalnie dopasować, wyjątkiem pierwszym wierszu trzeciej kolumnie. Dlaczego jest to pomnożone przez dwa? Poniżej linii kodu z metodą frustumM android.opengl.Matrix że generują pierwsze trzy elementy trzeciej kolumny:

final float A = 2.0f * ((right + left) * r_width); 
final float B = (top + bottom) * r_height; 
final float C = (far + near) * r_depth; 

z r_width, r_height, r_depth zdefiniowany jako:

final float r_width = 1.0f/(right - left); 
final float r_height = 1.0f/(top - bottom); 
final float r_depth = 1.0f/(near - far); 

początkową linię z "ostatecznym floatem A" wydaje się pomyłkowo mnożyć przez 2.

Czy to błąd w kodzie Androida, czy też coś mi brakuje? Wiem, że termin ten znika, jeśli stożek ścięty jest symetryczny. Podczas wykonywania kodu z asymetrycznym stożkiem ściętym generowane macierze są rzeczywiście różne, podobnie jak powstałe wektory, gdy ten sam wektor jest mnożony przez te różne macierze.

Odpowiedz

1

((ja preffer tylko komentować, ale nie wolno mi.))

Dziękuję wam za zrozumienie. Po prostu musiałem dodać

mMyMatrix[8] /= 2f; 

po

Matrix.frustrumM(mMyMatrix, ...)

Aby rozwiązać moje problemy aspekt ratio :)

1

tak, jeśli wywołanie funkcji z (-ratio, stosunek, - 1, 1, 1, 10) ustawione parametry, nie powoduje to probelmu, ale jeśli zadzwonisz z (prawe! = -1 * w lewo), to robi coś innego.

Problem ten występuje, gdy sprawdzam kod źródłowy. westchnienie.

Powiązane problemy