У меня есть приложение для iPhone с дополненной реальностью, которое я конвертирую из Core Animation в OpenGL ES 1.1. Я добавил код, который был изменен из шаблона Apple OpenGL.
Моя проблема в том, что мой 3D-объект, перемещаясь вдоль отрицательной оси Z (от пользователя), кажется, исчезает в поле зрения камеры, пока он полностью не исчезнет. Я экспериментировал с несколькими решениями, но безрезультатно.
Что я определил:
Используя трехмерный икосаэдр из блога Джеффа Ламарша, объект начинает его с 0,0,0, а затем переводит с уменьшением координаты z. К тому времени, когда значение z достигает -2.0f, объект исчезает. Похоже, что он исчезает за кадром камеры.
Так я настраиваю свое окно и окно просмотра (без изменений от кода Apple)
glMatrixMode (GL_PROJECTION);
size = zNear * tanf (DEGREES_TO_RADIANS (fieldOfView) / 2.0);
//Grab the size of the screen
CGRect rect = self.bounds;
glFrustumf(-size, size,
-size / (rect.size.width / rect.size.height),
size / (rect.size.width / rect.size.height),
zNear, zFar);
glViewport(0, 0, rect.size.width, rect.size.height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Что я пробовал:
Вид с камеры - это основной вид, и несколько других видов добавляются в него как подпредставления, включая openGLView. Я прокомментировал эти взгляды для целей тестирования.
Я применил CATransforms, чтобы переместить openGLView в направлении z -500 и +500, и сделал то же самое для вида камеры.
Я также изменил zFar в приведенном выше коде на 1.0f, и он все еще исчезает в позиции z -2.0, что не имеет смысла (не должно ли оно исчезнуть при z = 1.0?)
Мои эксперименты запутали меня больше, чем когда я начинал (что обычно означает, что мне не хватает ключевой части, но я не могу понять, что). Спасибо за вашу помощь.