Какова цель включения состояния клиента? - PullRequest
2 голосов
/ 04 августа 2011

Во всех примерах, которые я видел, эти линии используются перед рисованием сеток: glEnableClientState(GL10.GL_VERTEX_ARRAY); glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

, а иногда glEnableClientState(GL10.GL_NORMAL_ARRAY);

И затем они всегда снова отключаютсяв конце вызова отрисовки для каждого меша.

Я не совсем понимаю, что они на самом деле делают и почему вы хотели бы их отключить.Я знаю, что мне, вероятно, нужно включить их, если я рисую треугольники из массива, использую текстуры и использую освещение.Но я не знаю, когда мне действительно нужно их отключить.

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

Мне не удалось найти какое-либо объяснение действительного значения этих состояний клиента, поэтому я не знаю, где можно безопасно оставить их включенными или выключенными.в моем коде.

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Можете ли вы просто оставлять их включенными постоянно?

Да, если хотите, и если все ваши примитивы используют все массивы, которые вы включаете.

При каких обстоятельствах вам нужно отключить их?

Чтобы не уничтожить или испортить до следующих рисунков.

Например, если у вас есть примитив, использующий нормали, вы просто включите его, позвонив по номеру glEnableClientState(GL_NORMAL_ARRAY) и сообщив OpenGL, где находятся ваши обычные данные, через glNormalPointer().Если вы не отключите GL_NORMAL_ARRAY, ваш следующий примитив будет использовать тот же обычный массив, что и ваш предыдущий примитив.Это может иметь последствия, если ваш следующий примитив не будет использовать нормали.

Поэтому рекомендуется восстанавливать состояние OpenGL после завершения рисования примитива.При этом вы можете оставить их включенными, если все ваши примитивы используют все включенные вами массивы, точно так же, как я оставляю включенным GL_TEXTURE_2D в течение всего времени работы приложения.Это , потому что Я знаю, что я буду часто использовать текстуры, и тогда нет никаких причин включать / отключать их в каждом вызове отрисовки объекта;это только снизит производительность приложения.

2 голосов
/ 04 августа 2011

glEnableClientState (GL_VERTEX_ARRAY)

Если вы объявите, как указано выше, он позволяет OpenGL использовать вершины из массива вершин

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...