2010-04-19 1 views
1

두 개의 구가있는 장면을 렌더링 중입니다. 나는 그 중 하나의 카메라를 돌고있다. 반 직관적 인 것은 일어납니다. 카메라가 구형 주위를 돌 때 다른 카메라가 뒤를 쫓을 때 다른 카메라가 앞에옵니다. 그래서 구체가 서로를 중심으로 회전하지 않는 것처럼 보이고 이동해야하는 것은 항상 선행입니다. 도와주세요.회전 카메라로 장면을 렌더링 할 때 왜 다른 사람 뒤에 표시 될 것으로 예상되는 객체는 그렇게하지 않습니까? OPENGL Objective-c

glLoadIdentity(); 

[self positionCamera]; 

glutSolidSphere(2, 12,12); 

glPushMatrix(); 
glTranslatef(5, 0, 0); 
glutSolidSphere(0.5, 12,12); 
glPopMatrix(); 

glFlush(); 

이 블록은 사용에 호출되는 클래스의 일부입니다 : 여기

장면을 렌더링하는 코드입니다.

[NSTimer scheduledTimerWithTimeInterval:DEFAULT_ANIMATION_INTERVAL 
           target:self 
           selector:@selector(drawRect) 
           userInfo:nil 
           repeats:YES]; 

그리고

-(void)positionCamera{} 

수학 카메라 혁명과하는 gluLookAt()

답변

1

은 기본적으로 당신이 지금하고있는 것은 마지막 원시 그린 백 - 투 - 전면 렌더링입니다 할 포함 것이다 항상 다른 사람들 위에 그려진 것처럼 보입니다.

원하는 작업은 화면에 그려지기 전에 각 조각의 깊이를 비교하는 깊이 테스트를 사용하는 것입니다. glEnable(DEPTH_TEST) 도움이됩니다.

+0

저는 GL 초기화 클래스를 사용합니다. 깊이 버퍼를 측정했습니다. int 깊이; glGetIntegerv (GL_DEPTH_BITS, & depth); NSLog (@ "% i 비트 깊이", 깊이) 0을 반환합니다. 이것이 문제가 될 수 있습니까? – nebulus

+0

깊이 테스트를 위해 깊이 버퍼가 있어야합니다. 왜 존재하지 않을지 모르겠지만 초기화 코드를 확인하십시오. 깊이 형식 텍스처를 명시 적으로 만들어 하드웨어에서 지원되는지 확인할 수 있습니다. (Objective-C에 익숙하지 않아 코드 예제가 없습니다.) 오브젝트가 카메라에서 얼마나 멀리 떨어져 있는지에 따라 16 또는 24 비트 깊이 버퍼가 충분해야합니다. 그 중 아무 것도 작동하지 않는 경우 trig를 사용하여 어느 것이 앞에 있어야하는지 알아 내고 마지막 이미지를 렌더링 할 수 있습니다. 그러나 깊이 테스트는 확실히 더 나은 옵션입니다. – ssube

+0

좋습니다! 내 애플 리케이션 창을위한 24 비트 버퍼를 설정했습니다. IB를 사용하면 Inspector를 사용하여 쉽게 수행 할 수 있습니다. 그것은 작동합니다. 고마워요! – nebulus

관련 문제