2013-01-01 4 views
0

저는 공간을 탐색 할 수있는 3D 객체를 그리는 Android에서 openGL ES 1.1에 의해 간단한 프로그램을 작성했습니다.OpenGL - 이전 변형을 기반으로 한 변환과 혼동했습니다.

3D 게임에서 1 인칭 카메라 모드처럼 왼쪽, 오른쪽, 안쪽으로 이동하고 왼쪽, 오른쪽, 위, 아래로 회전하고 싶습니다. onDrawFrame(GL10 gl)에 여기에 내 그림의 일부 (이것은 내가 카메라/눈 자체를 회전 할 의미) :

gl.glLoadIdentity(); 
    gl.glRotatef(lfRt, 0.0f, 1.0f, 0.0f); 
    gl.glRotatef(upDn, 1.0f, 0.0f, 0.0f); 
    gl.glTranslatef(X, 0.0f, 0.0f); 
    gl.glTranslatef(0.0f, Y, 0.0f); 
    gl.glTranslatef(0.0f, 0.0f, Z); 

lfRt 및 기타 변수는 우리가해야하는 시점을 결정합니다. (더 많은 것을 설명하기 위해 모든 moveIn() 호출에는 z가 상수로 더 해지고 다른 일부는 같은 논리가 사용됩니다).

내 혼란이 여기에 있습니다. 번역을 먼저 넣으면 메서드가 잘 작동하지만 (왼쪽, 등) 회전은 잘못되었습니다. (전 세계가 원점을 중심으로 회전 함) 반면에 회전을 먼저 넣으면 카메라는 잘 회전하지만 이동 방법이 잘못됩니다. 예를 들어 moveIn()은 항상 같은 행/축에서 이동합니다. z 축으로 이동하지 않고 이동하고 싶습니다.

어떻게해야합니까?

답변

1

먼저 회전을 적용한 다음이 시나리오에서 변환을 수행해야합니다. 행렬 연산은 비가 변식입니다. Here은 FPS 카메라의 간단한 예입니다. This 스레드도 유용합니다.

+0

나를 도와 주셔서 감사합니다. –

관련 문제