Я показываю сцену, в которой у меня две сферы. Я вращаю камеру вокруг одного из них. То, что происходит, противоречит интуиции. Когда камера идет вокруг сферы, другая попадает перед ней, когда вы ожидаете, что она позади. Таким образом, кажется, что сферы не вращаются вокруг друг друга, а та, которая должна идти, всегда впереди. Пожалуйста помоги.Почему, когда я снимаю сцену с вращающимися объектами камеры, которые вы ожидаете появляться за другими, не делайте этого? 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()
У меня есть класс инициализации GL, где я это делаю. Я измерил буфер глубины. int depth; glGetIntegerv (GL_DEPTH_BITS, & depth); NSLog (@ "% i бит глубина", глубина) Он возвращает 0. Возможно, это проблема? – nebulus
Вам определенно нужно иметь буфер глубины для тестирования глубины. Я не уверен, почему этого не будет, но проверьте свой код инициализации. Вы всегда можете попытаться явно создать текстуру формата глубины, просто чтобы убедиться, что она поддерживается аппаратным обеспечением (я не знаком с Objective-C, хотя и без образца кода). В зависимости от того, насколько далеко ваши объекты находятся в камере, буфер глубины 16 или 24 бит должен быть достаточным. Если все это не работает, вы всегда можете использовать триггер, чтобы узнать, что должно быть впереди, и сделать последнее. Но глубина тестирования, безусловно, лучшие варианты. – ssube
Отлично! Я установил 24-битный буфер для окна моих приложений. IB позволяет вам делать это легко с помощью инспектора. Оно работает. Спасибо, парни! – nebulus