· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.DIRECTX.OPENGL —› Lighting problem.

Посл.отвђт Сообщенiе


Дата: Авг 11, 2004 11:05:44

Как задать правильно параметры освещения и его позицию, чтобы свет все время исходил из точки обзора?
Задаю все параметры света в Init()
light_position[] = {0.0, 0.0, 1.0, 0.0}
В Draw() рисую прямоугольник в плоскости X,Y. Свет напрямую падая на его поверхность в таком положении, а прямоугольник остается едва освещен?, вращая его вокруг Y максимум света приходится когда он преодолевает угол в 45 в плоскости X,Z? Почему нет максимальной освещенности когда свет падает на него напрямую?
glBegin(GL_QUADS);
glNormal3f(-1.0,-1.0,0.0);
glVertex3f(-1.0,-1.0,0.0);
glNormal3f(1.0,-1.0,0.0);
glVertex3f(1.0,-1.0,0.0);
glNormal3f(1.0,1.0,0.0);
glVertex3f(1.0,1.0,0.0);
glNormal3f(-1.0,1.0,0.0);
glVertex3f(-1.0,1.0,0.0);
glEnd();


Дата: Авг 11, 2004 11:07:57

а каков материал освещаемого предмета?


Дата: Авг 11, 2004 12:17:13 · Поправил: keYMax

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


Дата: Авг 11, 2004 19:33:15

GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat mat_shininess[] = { 80.0f };
GLfloat mat_ambient[] = {0.0f, 0.1f, 0.1f, 1.0f};
GLfloat mat_diffuse[] = {0.0f, 0.5f, 0.5f, 1.0f};

GLfloat light_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat light_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat light_position[] = { 0.0, 0.0, 1.0, 0.0 };

glEnable(GL_NORMALIZE);

Как сделать нормаль перпендикулярно поверхности?
В какую сторону получаются нормали, походу в разные стороны а не перпендикулярно. Когда начинаешь вращать полигон его максимум освещенности приходится на ребро которое к тебе поворачивается т.е. нормали выглядят так

| | - нормали
XXXXXX
X X - полигон
X X
XXXXXX
| | - нормали

Полигон в плоскости X,Z а нормали не паралельно оси Y и перпендикулярно X,Z а почемуто получаются тоже в плоскости X,Z?

Интересно что выводя auxSolidCube() освещение нормальное максимум когда поверхности к тебе лицом?
В какую сторону получается нормаль после вычисления glNormal() перед glVertex().


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.054