2014-03-29 7 views
1

회전하는 메쉬에서 작업 중이며 회전의 특정 단계를 제외하고는 대부분 잘 동작합니다. 예를 들어회전하는 표면을 가진 OpenGL ES 2.0 가공물

enter image description here

전에

enter image description here

사이 enter image description here

여러분도 알다시피, OpenGL이 무엇을 앞두고 마음을 바꾸는 것과 같습니다. 재미있는 점은 전후 단계 모두가 서로 정상적인 것처럼 보이지만 스스로 정상적으로 보입니다. (이것은 trippy 광학 효과이지만 원하는 것은 아닙니다.)

GLOSit을 사용하여 iOS 6에서 프로그래밍하고 있습니다.

설정 및 드로잉 코드에 문제가 있는지 또는 회전과 관련이 있는지 알 수 없습니다. 어떤 통찰력이라도 대단히 감사 할 것입니다.

답변

1

행복하게 게시 한 후 내 답변을 발견했습니다. 깊이 버퍼를 사용하기 만하면됩니다.

drawableDepthFormat

귀하의 OpenGL 컨텍스트는 또한 선택적으로 다른 버퍼가 호출 관련 가질 수 있습니다

view.drawableDepthFormat = GLKViewDrawableDepthFormat16; 

nice explanation 당신에게 레이 Wenderlich 감사 (여기서보기는 GLKView*입니다) 깊이 버퍼 이렇게하면 뷰어에 더 가까운 물체가 더 멀리있는 물체 앞에서 나타나는지 확인할 수 있습니다.

기본적으로 OpenGL은 뷰어에 가장 가까운 객체를 버퍼의 각 픽셀에 저장합니다. 픽셀을 그릴 때 깊이 버퍼를 검사하여 이미 뷰어에 더 가까이 있는지 여부를 확인합니다. 그렇다면 버퍼를 삭제합니다. 그렇지 않은 경우에는 심도 버퍼 및 컬러 버퍼에 추가합니다.

이 속성을 설정하여 깊이 버퍼의 형식을 선택할 수 있습니다. 기본값은 GLKViewDrawableDepthFormatNone입니다. 이는 깊이 버퍼가 전혀 사용되지 않음을 의미합니다.

그러나이 기능 (일반적으로 3D 게임에서 사용)을 원할 경우 GLKViewDrawableDepthFormat16 또는 GLKViewDrawableDepthFormat24를 선택해야합니다. 여기서 트레이드 오프는 GLKViewDrawableDepthFormat16을 사용하면 앱에서 사용하는 리소스가 줄어들지 만 개체가 서로 매우 가까운 경우 렌더링 문제가 발생할 수 있습니다.