2011-07-01 4 views
1

OpenGL ES의 새로운 기능. 회전하고 번역 한 후 큐브의 월드 좌표를 계산하는 데 도움이 될 수 있습니까? 예 :
첫 번째 회전 큐브 :
gl.glRotatef (90, 1, 0, 0);
자신의 위치를 ​​변경하는 것보다
gl.glTranslatef (10, 0, 0);

어떻게 "새로운"세계 좌표를 계산할 수 있습니까? glGetFloatv (GL_MODELVIEW_MATRIX, 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];
답변 해 주셔서 감사합니다.glRotatef 및 glTranslatef 이후의 OpenGL 위치

+1

큐브의 새로운 위치를 찾고 있다면 가장 잘못된 것이 있습니다. 이 행렬 재료는 드로잉을보다 쉽게하기위한 것입니다 (모든 것을 수동으로 다시 계산할 필요없이 다른 위치에 물건을 그릴 수 있습니다). 나는 그것을 게임 로직을 계산하는 데 사용하지 않을 것이다. 당신이하려고하는 것에 대한 더 자세한 정보가 있습니까? – Mario

+0

추천 정보 읽기 -http : //u.cs.biu.ac.il/~kapaho/CG/06_3d_trans.pdf#page=21 – URL87

답변

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는 modelview 매트릭스의 현재 값을 지정된 float 버퍼로 다시 읽어들입니다. OpenGL 4x4 행렬에서는 인덱스 0이 왼쪽 상단이고, 인덱스 3이 첫 번째 열의 가장 낮은 숫자이고 12가 첫 번째 행의 오른쪽 끝 번호입니다. OpenGL FAQ은이 용어에 완전히 만족하지는 않지만 일반적으로 열 - 주요 레이아웃이라고합니다.