在glRotatef和glTranslatef之后的opengl es位置

时间:2011-07-01 19:47:20

标签: android opengl-es

我是OpenGL ES的新手。旋转和平移后,你能帮我计算一下立方体的世界坐标吗?例如:
首先我旋转立方体:
gl.glRotatef(90,1,0,0);
而不是改变他的立场 gl.glTranslatef(10,0,0);

我怎样才能计算出他的“新”世界坐标?我读了glGetFloatv(GL_MODELVIEW_MATRIX,矩阵)但不理解它。也许有人可以提供示例代码。

修改
我找到了解决方案Android代码
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];
z = matrix[14];
谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

虽然你有一个你想要的部分的答案,但就你的问题的其余部分而言,你会做类似的事情(如果我犯了任何Java错误,请原谅我,我不是真正的Android人):

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

getFloatv只是将模型视图矩阵的当前值读回到指定的浮点缓冲区中。在OpenGL中,指定了4x4矩阵,使得索引0是左上角,索引3是第一列中的最小数字,12是第一行中最右边的数字。这通常被称为列主要布局,尽管OpenGL FAQ对该术语并不完全满意。