Каково поведение с нормальными векторами, которые не нормализованы в OpenGL? - PullRequest
1 голос
/ 06 февраля 2012

Мне нужно создать эллипс с OpenGL.Простейшим способом, который я нашел, было использовать GLUquadric с gluDisk(...), который генерирует круглый диск, вместе с glScale(...), чтобы превратить диск в эллипс.Единственная очевидная проблема этого метода заключается в том, что нормальные векторы, генерируемые gluDisk, перестанут нормализоваться после вызова glScale.

Это повлияет на освещение каким-либо образом? Чтотакое поведение OpenGL в этом случае?Являются ли векторы автоматически перенормированными, поведение не определено или это что-то еще?

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Это будет иметь (плохие) эффекты на освещение. Ожидается, что вектор нормали будет иметь длину 1, в противном случае освещение может быть более / менее интенсивным, чем предполагалось. Значения, которые полагаются на скалярное произведение с нормалью, очевидно, будут неверными. Короче, либо обязательно нормализуйте нормали вручную, либо используйте GL_NORMALIZE. OpenGL будет просто предполагать, что заданные вами нормали уже нормализованы, если не используется GL_NORMALIZE. Не будет "ошибки", если они не нормализуются. И если вы решите использовать GL_NORMALIZE, тогда будет дополнительная вычислительная стоимость каждого кадра. Так что будьте осторожны, если производительность будет проблемой. В любом случае, использование GL_NORMALIZE, вероятно, именно то, что вы ищете в данный момент.

2 голосов
/ 06 февраля 2012

Их можно автоматически нормализовать с помощью glEnable(GL_NORMALIZE). Или нормализуйте их в своих шейдерах (если есть).

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