Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OpenGL

После масштабирования объекта (функция glScale) он неправильно освещается истоником света. Это проблема моей видеокарты, или OpenGL ?

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

Для исправления проблемы нужно включать автоматическую ренормализацию нормалей

	glEnable(GL_NORMALIZE),

то есть если после умножения на modelview вектор-нормаль состоит из компонент (x,y,z), то GL_NORMALIZE делает следующее:

	L=sqrt(x2 + y2 + z2) - вычисляется длина вектора нормали, затем
	x=x / L
	y=y / L
	z=z / L

Естественно, это снижает скорость (sqrt, все-таки)

Поэтому в OpenGL 1.2 введено расширение GL_EXT_rescale_normal, которое просто делит нормаль на соответствующие элементы матрицы modelview, и получает правильное значение вектора нормали. Деление быстрее нормализации, а результат будет тот же.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог