2012-07-28 13 views
6

Parece algo divertido sobre la forma en que funciona el frustumM de Android. Si puedo comprobar el libro rojo de OpenGL, la matriz generada es similar al siguiente:
http://www.glprogramming.com/red/images/Image23.gif
Songho.ca parece estar de acuerdo con esto:
http://www.songho.ca/opengl/files/gl_projectionmatrix_eq16.png
¿Por qué la matriz generada por el frustumM de Android difiere de la Redbook?

Sin embargo, uno de los componentes se multiplica por 2 con frustumM de Android, y no en las otras matrices de ejemplo. Esto es lo que parece estar haciendo:

Todo parece coincidir funcionalmente arriba, excepto la primera fila, tercera columna. ¿Por qué se está multiplicando por dos? He aquí las líneas de código de método frustumM de android.opengl.Matrix que generan los tres primeros elementos de la tercera columna:

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

Con r_width, r_height, r_depth define como:

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

la alineación inicial con "flotador final A" parece multiplicarse erróneamente por 2.

¿Es esto un error en el código de Android, o simplemente me falta algo? Sé que el término cancela si el tronco es simétrico. Cuando se ejecuta el código con un tronco truncado asimétrico, las matrices generadas en realidad son diferentes y también lo son los vectores resultantes cuando el mismo vector se multiplica con esas matrices diferentes.

Respuesta

1

((me gustaría preffer sólo para comentar, pero no se me permite.))

Gracias chicos por la visión. Sólo tenía que añadir

mMyMatrix[8] /= 2f; 

después

Matrix.frustrumM(mMyMatrix, ...)

Para resolver mis problemas de relación de aspecto :)

1

sí, si se llama a la función con un (-ratio, relación, - 1, 1, 1, 10) parámetros establecidos, no causa el problema, pero si llama con (derecha! = -1 * izquierda), hace que la cosa sea diferente.

Encuentro este problema cuando verifico el código fuente. suspiro.

Cuestiones relacionadas