开发者

opengl es position after glRotatef and glTranslatef

i'am new in OpenGL ES. Can you helps me to calculate world coordinates of cube after rotate and translate. For example:

first i rotate cube:

gl.glRotatef(90, 1, 0, 0);

than change his position

gl.glTranslatef(10, 0, 0);

How can i calculate his "new" world coordinates? I read about glGetFloatv(GL_MODELVIEW_MATRIX , matrix) but not understand it. Maybe someone can provide sample code.

EDIT:

I found solution. Android code

float[] matrix = new float[] {

1,0,0,0,

0,1,0,0,

0,0,1,0,

0,0,0,1,

};

Matrix.rotateM(matrix, 0, rx, 1, 0, 0);

Matrix.rotateM(matrix, 0, ry, 0, 1, 0);

Matrix.rotateM(matrix, 0, rz, 0, 0, 1);

Matrix.translateM(matrix, 0, x, y, z);

x = matrix[12];

y = matrix[13]开发者_JAVA技巧;

z = matrix[14];

Thanks for answers.


Although you have an answer for the part you want, in terms of the rest of your question, you'd do something like (please forgive me if I make any Java errors, I'm not really an Android person):

float[] matrix = new float[16];

gl.glGetFloatv(GL_MODELVIEW_MATRIX, matrix);

// check out matrix[12], matrix[13] and matrix[14] now for the world location
// that (0, 0, 0) [, 1)] would be mapped to

That getFloatv just reads back the current value of the modelview matrix into the float buffer specified. In OpenGL 4x4 matrices are specified so that index 0 is the top left, index 3 is the lowest number in the first column and 12 is the number furthest to the right in the first row. That's usually referred to as column-major layout, though the OpenGL FAQ isn't entirely happy with the term.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜