2012-07-28 12 views
6

Bir şey, Android'in frustumM'sinin çalışmasıyla ilgili komik görünüyor.
http://www.glprogramming.com/red/images/Image23.gif
Songho.ca bu yaramış: Ben OpenGL kırmızı kitabını işaretlerseniz, matris gibi görünür oluşturulan
http://www.songho.ca/opengl/files/gl_projectionmatrix_eq16.png
Android'in frustumM tarafından oluşturulan matris neden Redbook'lardan farklı?

Ancak bir bileşen Android'in frustumM ile 2 ile çarpılır ve diğer örnek matrislerde değil. İşte yapıyor gibi görünüyor budur:

Her şey işlevsel haricinde ilk satırı, üçüncü sütun maç gibi görünüyor. Neden bu iki ile çarpılıyor? Burada üçüncü kolonun ilk üç elemanları oluşturmak android.opengl.Matrix en frustumM yönteminden kod satırları verilmiştir:

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

satır başlangıç: r_width, r_height, r_depth ile

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

olarak tanımlanmaktadır "son float A" ile yanlışlıkla 2 ile çarpıyor gibi görünür.

Bu, Android'in kodundaki bir hata mı, yoksa sadece bir şey mi eksik? Terimin simetrik olması durumunda terimin iptal edildiğini biliyorum. Kod, asimetrik bir kesinti ile çalıştırıldığında, oluşturulan matrisler aslında farklıdır ve aynı vektör, bu farklı matrislerle çarpıldığında ortaya çıkan vektörlerdir.

cevap

1

((Ben sadece yorum yapmak ama izin yok preffer ederim.)) Bakınız

anlayış için teşekkür ederim çocuklar. Sadece

Matrix.frustrumM(mMyMatrix, ...)

benim boy oranı problemlerini :) çözmek için sonra

mMyMatrix[8] /= 2f; 

eklemek zorunda

1

evet, birlikte işlevini de arama bir (-ratio oran, - 1, 1, 1, 10) parametrelerinin ayarlanması, bu problamaya neden olmaz, ancak eğer (sağ! = -1 * sol) ile çağırırsanız, bu farklı bir şey yapar.

Kaynak kodunu kontrol ettiğimde bu sorunu buluyorum. iç çekmek.

İlgili konular