OpenGL ES 1.1: выбраковка по сравнению с плоскостью ближнего обрезания - производительность - PullRequest
0 голосов
/ 16 декабря 2011

Я пишу приложение в OpenGL ES 1.1.Я рендерил текстурированную сферу вокруг зрителя, то есть точка обзора глаза находится в центре сферы.Поскольку мне не нужны какие-либо световые эффекты, в настоящее время нет необходимости иметь поверхностные нормали для каждой вершины.Тем не менее, я хотел бы, чтобы те включили отбраковку задней поверхности.Есть ли какая-то польза в том, чтобы включить отбраковку задней поверхности?Поскольку мой глаз находится в центре сферы, в любом случае любые лица, которые были выбракованы (то есть за глазом), будут обработаны отсечкой в ​​плоскости ближней оси z.

Значит, добавление нормалей поверхности и включение отбраковки задней поверхности принесет мне какую-то выгоду в производительности в этой ситуации?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Прежде всего, нормали поверхности не имеют ничего общего с отбраковкой задней поверхности , по крайней мере для части OpenGL.Лицевая или обратная сторона грани определяется порядком ее вершин при проецировании в пространство экрана, которое по умолчанию (которое можно изменить с помощью glFrontFace) является лицевым, когда вершины упорядочены против часовой стрелки и обратно- при заказе по часовой стрелке.

Так что вам не нужно никаких нормалей.Они используются только для расчета освещения и ничего больше.Как нормаль одной вершины должна влиять на ориентацию окружающих граней?Взять среднее по вершинам нормали?Что, если они полностью противоположны или что-то более странное (поскольку пользователь может указать любые нормали, которые он хочет)?

При этом вы также не нуждаетесь в отбраковке задней поверхности для своей сферы, так как изнутри вы всегдавсе равно смотрите на лицевую сторону.Но также не повредит включить его, так как вы также не видите никаких задних лиц (и вы можете предположить, что выбраковка лица бесплатна).Но в этом случае обратите внимание на ориентацию или лица, возможно, вам нужно включить отбраковку лицевой стороны (glCullFace(GL_FRONT)) вместо отбраковки лицевой стороны, когда вы находитесь внутри сферы, так как большинство объектовтесселяция, чтобы их треугольники были обращены наружу.Или вы можете просто переключиться на glFrontFace(GL_CW).

0 голосов
/ 16 декабря 2011

Вам, конечно, не нужны нормали для того, чтобы включить отбраковку задней поверхности.Единственное, что имеет значение для отбраковки, это то, является ли полигон лицевым или обратным.Вы можете указать, что является лицевой стороной с помощью функции glFrontFace , и точно указать, что нужно отбраковать, с помощью функции glCullFace .Нормали не нужны.

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

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