Why does the matrix generated by Android's frustumM differ from the Redbook's?

送分小仙女□ 提交于 2020-01-01 10:14:08

问题


Something seems funny about the way that Android's frustumM works. If I check the OpenGL red book, the matrix generated looks like this:

(source: glprogramming.com)

Songho.ca seems to agree with this:

(source: songho.ca)

However, one component is multiplied by 2 with Android's frustumM, and not in the other example matrices. Here's what it seems to be doing:


Everything seems to functionally match up, except the first row, third column. Why is that being multiplied by two? Here's the lines of code from android.opengl.Matrix's frustumM method that generate the first three elements of the third column:

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

With r_width, r_height, r_depth defined as:

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

The line starting with "final float A" appears to be mistakenly multiplying by 2.

Is this a mistake in Android's code, or am I just missing something? I know that the term cancels out if the frustum is symmetrical. When running the code with an asymmetrical frustum, the generated matrices actually are different and so are the resulting vectors when the same vector is multiplied with those differing matrices.


回答1:


It's a bug with Android. Please see http://code.google.com/p/android/issues/detail?id=35646




回答2:


((I'd preffer just to comment but I'm not allowed.))

Thank you guys for the insight. I just had to add

mMyMatrix[8] /= 2f;

after

Matrix.frustrumM(mMyMatrix, ...)

To solve my aspect ratio problems :)




回答3:


yes, if you call the function with a (-ratio, ratio, -1, 1, 1, 10) parameters set, it does not cause the probelm, but if you call with (right != -1 * left), it makes thing different.

I find this issue when i check the source code. sigh.



来源:https://stackoverflow.com/questions/11697728/why-does-the-matrix-generated-by-androids-frustumm-differ-from-the-redbooks

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!