2010-04-19 3 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 depth; glGetIntegerv (GL_DEPTH_BITS, & depth); NSLog (@ "% i бит глубина", глубина) Он возвращает 0. Возможно, это проблема? – nebulus

+0

Вам определенно нужно иметь буфер глубины для тестирования глубины. Я не уверен, почему этого не будет, но проверьте свой код инициализации. Вы всегда можете попытаться явно создать текстуру формата глубины, просто чтобы убедиться, что она поддерживается аппаратным обеспечением (я не знаком с Objective-C, хотя и без образца кода). В зависимости от того, насколько далеко ваши объекты находятся в камере, буфер глубины 16 или 24 бит должен быть достаточным. Если все это не работает, вы всегда можете использовать триггер, чтобы узнать, что должно быть впереди, и сделать последнее. Но глубина тестирования, безусловно, лучшие варианты. – ssube

+0

Отлично! Я установил 24-битный буфер для окна моих приложений. IB позволяет вам делать это легко с помощью инспектора. Оно работает. Спасибо, парни! – nebulus

 Смежные вопросы

  • Нет связанных вопросов^_^