Кто-нибудь знает, что делает kCCDirectorProjection2D? - PullRequest
2 голосов
/ 09 марта 2012

Я нашел исправление для поддержки дисплея сетчатки iPad для моей игры cocos2d.Когда я запускал игру в портретном режиме на симуляторе сетчатки ipad, он не мог ничего отобразить.Но когда я изменил настройку по умолчанию с kCCDirectorProjection3D на kCCDirectorProjection2D, он начал работать нормально.

Я хочу знать, что именно делает kCCDirectorProjection2D / kCCDirectorProjection3D?Будет ли изменение настроек по умолчанию вызывать какие-либо проблемы?

Спасибо Abhinav

1 Ответ

5 голосов
/ 09 марта 2012

3D-проекция (по умолчанию):

  • использует перспективную проекцию OpenGL с фиксированным положением камеры и точкой обзора
  • Узлы отрисовываются в порядке их добавления в иерархию узлов. Вы можете влиять на порядок прорисовки через свойство zOrder. zOrder совпадает с z в addChild:z:.

enter image description here

Глядя на картинку, вы должны будете представить, что все ваши узлы нарисованы на одной и той же глубине, например, прямо в задней плоскости. Поэтому все они появляются в одном размере. Правильное перекрытие узлов достигается просто путем рендеринга каждого узла в определенном порядке.

Вы по-прежнему можете изменить истинную глубину рендеринга OpenGL для узлов с помощью vertexZ, но это не рекомендуется в 3D-проекции, поскольку это приведет к тому, что узлы будут немного смещены относительно их положения из-за 3D-проекции.

2D проекция:

  • использует OpenGL ортогональную проекцию
  • Узлы отрисовываются в порядке свойства vertexZ, которое имеет приоритет над zOrder.
  • Изменение vertexZ также влияет на размер узлов. Если вы измените vertexZ, вам потребуется включить буферизацию глубины в EAGLView для корректного рендеринга. Чаще всего это используется для правильной визуализации перекрывающихся плиток в изометрических картах плиток.
  • Вы не можете использовать 2D-проекцию с cocos3d.
  • CCCamera будет вести себя иначе.
  • 3D, сетка и действия камеры (поворот страницы, волны и т. Д.) Не работают правильно или ведут себя иначе в 2D-проекции или даже могут сбрасываться в 3D-проекцию.

enter image description here

С 2D-проекцией вы теперь можете перемещать спрайтов на любую глубину, используя vertexZ без смещения положения узла. Однако, если вы не включите буферизацию глубины, ваши узлы будут выглядеть меньше или больше в зависимости от их свойства vertexZ.

Если вы не измените свойство vertexZ какого-либо узла, 2D-проекция должна давать идентичные результаты для 3D-проекции. Однако для некоторых узлов или действий может потребоваться, чтобы 3D-проекция работала правильно.

Проверьте ссылку в конце этого предложения, если хотите узнать все мрачные подробности о матрицах проекции OpenGL .

Оба прогноза имеют одинаковые рабочие характеристики. Однако включение 2D-проекции без использования vertexZ обычно имеет смысл только при работе с плитками.

Короче говоря: до тех пор, пока ваше приложение отлично работает в 2D Projection и не показывает ошибок после тщательного тестирования, у вас все будет хорошо.

Но я уверен, что это не правильное исправление для iPad Retina. Насколько нам известно до 16 марта, это может быть проблема, которая возникает только в iPad Retina Simulator. И эта проблема, скорее всего, будет решена путем обновления функции retina mode CCDirector .

...