|
|
От: |
Renh
|
|
| Дата: | 11.10.07 17:56 | ||
| Оценка: | |||
Вектора нормалей остаются нормализованными до тех пор, пока вы используете только повороты и переносы своих объектов. Если же вы производите масштабирование, используете специфическую матрицу преобразования или изначально указываете ненормализованные вектора нормалей – вы должны заставить OpenGL нормализовать векторы после преобразований. Чтобы это сделать, вызовите glEnable(GL_NORMALIZE).
Если вы устанавливаете вектора нормали единичной длины и применяете только равномерное масштабирование (с сохранением одинаковых пропорций по всем осям), то для нормализации вы можете также использовать glEnable(GL_RESCALE_NORMAL). В этом случае для возвращения нормалей к единичной длине OpenGL будет делить все их координаты на одинаковую величину изменения масштаба, взятую из матрицы модельного преобразования.
Заметьте, что автоматическая нормализация или масштабирование обычно требуют дополнительных расчетов, которые могут снизить быстродействие вашего приложения. Равномерное масштабирование нормалей с помощью GL_RESCALE_NORMAL обычно менее расточительно в смысле производительности, чем полномасштабная нормализация с помощью GL_NORMALIZE. По умолчанию оба описанных механизма (и нормализация, и масштабирование) выключены.