|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.11.2011, 18:08 | #1 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Освещение в OpenGL
Сегодня решил отойти от своих дел и вспомнить работу с освещением, которую я так и не разобрал. За основу взял книгу Краснова. Вроде бы все правильно, но ничего не заметно.
Код:
Заранее спасибо. |
12.11.2011, 20:16 | #3 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
glDisable(GL_LIGHTING);
И glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); Нужно местами поменять. Код:
Последний раз редактировалось Kostia; 12.11.2011 в 20:26. |
13.11.2011, 15:01 | #4 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
Вот чего я добился. Код:
|
|
13.11.2011, 20:12 | #5 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Пытаясь узнать свою ошибку понял, я не знаю как строится вектор нормали. Думаю, что Вам объяснить это девятикласснику не составит труда. Изложу свои знания:
Нормальный вектор всегда имеет длину 1. Он строится перпендикулярно плоскости. аргументы функции glNormal3f - точка конца вектора Этот вектор проводится, по идее, от плоскости. Откуда он исходит?. Из центра? Но тогда как из центра провести нормаль вот к такой плоскости?(на рисунке.Вид как бы сверху) (как ни странно, но в книге Краснова говорится, что нормаль проводится именно К плоскости а не ОТ) В общем, Вы меня поняли. P.S. Я не обладаю достаточными знаниями, чтобы усвоить это из того, что дает мне гугл. Хотя пытался. |
15.11.2011, 00:43 | #6 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Вообще нормальный вектор конкретно ниоткуда не исходит. Приложить нормальный вектор можно к любой точке. На самом деле он просто указывает направление, перпендикулярное какой либо плоскости в пространстве. Например имея вектор источника света и нормальный вектор можно накладывать попиксельное освещение.
Формула простого диффузного освещения (пример из шейдеров): цвет пикселя = цвет текстуры * dot(Normal, vec_light), где dot - скалярное произведение, Normal - вектор нормали точки освещаемого объекта, vec_Light - вектор от источника света в эту точку. Получается такое изображение: Как это работает? Дело в том что освещенность конкретной точки зависит от угла, под которым свет падает на нее. Поскольку скалярное произведение единичных векторов (ab = |a|*|b|*cos(a)) как раз и возвращает косинус между векторами (т.к |a|=|b|=1) мы имеем высокую освещенность в тех местах где угол между нормалью и вектором от источника мал (тогда cos(a)~1) и низкую где он большой (cos(a)~0). Цитата:
|
|
15.11.2011, 07:22 | #7 | |||
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
Цитата:
Цитата:
Но мне очень интересно что же не так в моем коде? Векторы проведены во внутрь куба. Ведь так не должно быть. Если сделать обратное, то стороны становятся черными. |
|||
15.11.2011, 07:53 | #8 | |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Цитата:
Последний раз редактировалось Warn; 15.11.2011 в 08:33. |
|
15.11.2011, 16:20 | #9 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Спасибо всем. У меня появился еще один вопрос, наверное, последний. Мне кажется все из-за этого. Есть массив для освещения position:array[0..3] of GlFloat = (0,0,1,1); Что значит все четыре координаты? В моих знаниях: первые три - точка, а вот что регулирует четвертая? Что-то я не найду информации.
|
15.11.2011, 19:47 | #10 |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
грубо говоря лампочки бывают разного типа: лампочка(точечный свет(POIN LIGHT) и издалека приходящий (направленный (DIRECTONAL))
хyzw Если w = 0.0 то хyz трактуется как направление источника, свет направленный. Если w <> 0.0 то хyz трактуется как позиция точечного источника света. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Освещение в OpenGL - как добиться релистичности, нужен мануал. | Karp_13 | Общие вопросы C/C++ | 4 | 29.10.2011 00:29 |
OpenGL - освещение | Артэс | Общие вопросы C/C++ | 0 | 12.10.2011 20:46 |
как сделать такое освещение(opengl) ? | NiCola999 | Общие вопросы C/C++ | 3 | 20.11.2010 15:02 |
Освещение ноута | Lemo | Свободное общение | 21 | 30.05.2010 14:55 |
OpenGL, освещение | loozer | Мультимедиа в Delphi | 3 | 17.12.2008 19:09 |