Re: OpenGL: проблема освещения от направленного источника
От: Renh Россия  
Дата: 11.10.07 17:56
Оценка:
Здравствуйте, timurttv, Вы писали:

T>Никак не могу решить следующую проблемму. Создаю в моей сцене направленный источник света (т.е. в соответсвии с документацией освещенность обьекта не зависит от растояния до обьекта). Создаю в сцене простой примитив (например сферу). Запускаю программу и радуюсь полученной картинкой. Проблема начинается когда я начинаю масштабировать данный примитив при помощи Scalef(x,y,z) функции. наблюдаю следующий эфект: при увеличении обьекта он становится менее освещенным (темнеет), при уменьшении обьекта он заливается ярким светом. Вопрос, что нужно сделать, чтобы независимо от параметров Scalef() я имел одну и ту же картинку освещенности.


Это известная неприятность. Вот цитата из Red Book:

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


Надеюсь, поможет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.