3D-проекция (по умолчанию):
- использует перспективную проекцию OpenGL с фиксированным положением камеры и точкой обзора
- Узлы отрисовываются в порядке их добавления в иерархию узлов. Вы можете влиять на порядок прорисовки через свойство
zOrder
. zOrder
совпадает с z в addChild:z:
.
Глядя на картинку, вы должны будете представить, что все ваши узлы нарисованы на одной и той же глубине, например, прямо в задней плоскости. Поэтому все они появляются в одном размере. Правильное перекрытие узлов достигается просто путем рендеринга каждого узла в определенном порядке.
Вы по-прежнему можете изменить истинную глубину рендеринга OpenGL для узлов с помощью vertexZ
, но это не рекомендуется в 3D-проекции, поскольку это приведет к тому, что узлы будут немного смещены относительно их положения из-за 3D-проекции.
2D проекция:
- использует OpenGL ортогональную проекцию
- Узлы отрисовываются в порядке свойства
vertexZ
, которое имеет приоритет над zOrder
.
- Изменение
vertexZ
также влияет на размер узлов. Если вы измените vertexZ
, вам потребуется включить буферизацию глубины в EAGLView для корректного рендеринга. Чаще всего это используется для правильной визуализации перекрывающихся плиток в изометрических картах плиток.
- Вы не можете использовать 2D-проекцию с cocos3d.
- CCCamera будет вести себя иначе.
- 3D, сетка и действия камеры (поворот страницы, волны и т. Д.) Не работают правильно или ведут себя иначе в 2D-проекции или даже могут сбрасываться в 3D-проекцию.
С 2D-проекцией вы теперь можете перемещать спрайтов на любую глубину, используя vertexZ
без смещения положения узла. Однако, если вы не включите буферизацию глубины, ваши узлы будут выглядеть меньше или больше в зависимости от их свойства vertexZ
.
Если вы не измените свойство vertexZ
какого-либо узла, 2D-проекция должна давать идентичные результаты для 3D-проекции. Однако для некоторых узлов или действий может потребоваться, чтобы 3D-проекция работала правильно.
Проверьте ссылку в конце этого предложения, если хотите узнать все мрачные подробности о матрицах проекции OpenGL .
Оба прогноза имеют одинаковые рабочие характеристики. Однако включение 2D-проекции без использования vertexZ
обычно имеет смысл только при работе с плитками.
Короче говоря: до тех пор, пока ваше приложение отлично работает в 2D Projection и не показывает ошибок после тщательного тестирования, у вас все будет хорошо.
Но я уверен, что это не правильное исправление для iPad Retina. Насколько нам известно до 16 марта, это может быть проблема, которая возникает только в iPad Retina Simulator. И эта проблема, скорее всего, будет решена путем обновления функции retina mode CCDirector .