2011-01-20 3 views
0

에 나쁜 코딩 일이 있습니다.아이폰 OpenGL : glFlash와 glFrustumf. 3D가 아니라면?

맞아요, 사용자 상호 작용을 통해 주위를 돌고있는 3D 큐브를 만들 필요가 있습니다. 이봐.
3D 큐브를 만드는 모든 예는 glOrthof를 사용하는 것처럼 보입니다. 사람들에게 하나를 데모 할 때 3D가 아니라고 말합니다.

문제는 glFrustumf가 나 앞에서 대신 큐브에 넣는 것 같습니다. 나는 그것이 모델 뷰 매트릭스를-사용하여 다시 때문에 glTransform를 사용하여 뒤로 이동하지 못할

/* save current rotation state */ 
GLfloat matrix[16]; 
glGetFloatv(GL_MODELVIEW_MATRIX, matrix); 

/* re-center cube, apply new rotation */ 
glLoadIdentity(); 


glRotatef(self.angle, self.dy,self.dx,0); 

/* reapply other rotations so far */ 
glMultMatrixf(matrix); 

그래서 질문이 있습니다 (I도 수동으로 수정 시도).
내가 glFrustumf 그래서, 도대체 내가 5 뒤로 물러나 여전히 모델 매트릭스를 다시 사용 어떻게하면

+0

['glMatrixMode()'] (http://www.khronos.org/opengles/documentation/opengles1_0/html/glMatrixMode.html) 전화는 어디에 있습니까? – genpfault

답변

3

(이것은 사용자가 이동 무엇을 적 방향 큐브 회전을 유지)를 사용해야 3D 큐브를 수행하려면 glOrthof()이 "3-D가 아닌"것을 의미하는 것이 확실하지 않습니다. 회전 큐브 예제에서 텍스쳐 큐브를 렌더링하기 위해 OpenGL ES 1.1과 2.0을 모두 사용하는 here 예제는 3-D에서 작동하는 것으로 보이며 렌더러의 OpenGL ES 1.1 측면에서 glOrthof()을 사용합니다. 음영 및 기타 효과는 glOrthof() 용도와 별도로 적용 할 수 있습니다.

이 예제에서는 큐브를 조작하기 위해 모델 뷰 매트릭스를 다시 읽지 않습니다. 대신 매트릭스의 사본을 로컬에 보관하고 일부 Core Animation 도우미 기능을 사용하여 수정합니다. 큐브에서 수행하는 CATransform3DRotate() 외에도 CATransform3DTranslate()을 던져서 특정 방향으로 옮길 수는 있지만 여전히 회전 할 수 있어야합니다.

성능을 위해 모델 뷰 매트릭스의 로컬 사본을 유지합니다 (모델 뷰 매트릭스를 다시 읽으면 OpenGL ES 1.1의 렌더링 파이프 라인이 중단됨). 2.0과의 호환성을 위해 (매트릭스를 유니폼으로 보내야하는 경우) 쉐이더).

또한 질문에 대한 답변 (닫힐 수도 있음)에서 모델보기 행렬 내에서 값을 임의로 변경하고 선형 변위를 볼 수는 없습니다. 수학을 올바르게해야하고 행렬 수학은 결코 내 강점 중 하나가 아닙니다. 행렬을 조작 할 때 Core Animation에서 제공되는 변환 작업을 수행하는 것이 가장 좋습니다.

관련 문제