2012-03-01 3 views
0

Я смотрел шаблон для OpenGL ES 2.0 в Xcode, и я заметил, что Apple создает новую перспективную матрицу и новую матрицу преобразования перед каждым фреймом. Я также вижу это в учебниках. Когда я использую OpenGL на других платформах, мне нужно только создать Matrices один раз. Почему Apple хочет, чтобы вы создали новый кадр?New Perspective + Transform Matrix каждое обновление?

ответ

0

В комплексном применении, есть несколько способов справиться с OpenGL состояния:

1) имеют политику, где каждая функция или метод, который изменяет OpenGL состояния должны установить его обратно к тому, что это было до того, что они сделали что-нибудь

2) Каждая функция или метод устанавливает состояние на то, что они хотят, чтобы быть предполагая ничего о существующем состоянии

3) отслеживать состояние и функции и методы могут проверить его на месте и установить только то, что они нуждаются в

В случае 1, если кто-то забывает следовать политике, возникают ошибки и их трудно отследить. Кроме того, получение текущего состояния может быть дорогостоящим для определенных бит состояния.

В случае 2 вы проводите время, которое вам может не понадобиться. Это, как правило, не так уж плохо.

В случае 3 вы тратите много усилий и памяти на отслеживание состояния, которое OpenGL уже поддерживает. Это дорого и подвержено ошибкам.

Как обычно, я иду с № 2. Это наименьшее количество работы для меня и в большинстве случаев имеет хорошую производительность. Ваш пробег может отличаться.

+0

Вы имеете в виду сбросить его перед рендерингом каждой модели для # 2? Если да, то как насчет предыдущих преобразований? –

+0

Все зависит от того, что вы пытаетесь сделать. В приложениях, над которыми я работал, часто используется множество способов, которыми мы используем OpenGL для рендеринга. Таким образом, мы можем отобразить модель, а затем нарисовать некоторые элементы управления на экране. Обычно нам нужны разные преобразования для экранных элементов управления, чем модели. Но вы можете сбросить такие вещи, как 'glColor *()' или 'glLineWidth()' для каждой модели. Это зависит только от конкретной ситуации. – user1118321

Смежные вопросы