Мой 3D-объект (открытые окна) исчезает за камерой iPhone - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть приложение для 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?)

Мои эксперименты запутали меня больше, чем когда я начинал (что обычно означает, что мне не хватает ключевой части, но я не могу понять, что). Спасибо за вашу помощь.

1 Ответ

1 голос
/ 23 июля 2011

Приведите значению zFar довольно большое значение, например 1000.

Кстати, помните, что значения z усеченного конуса должны быть заданы как -zNear и -zFar. Поэтому, если вам нужно, чтобы ваш объект был удален от вас, значение z должно быть достаточно большим, чтобы поддерживать сцену. Следовательно - (- zFar) становится большим положительным значением.

...