Как задать правильно параметры освещения и его позицию, чтобы свет все время исходил из точки обзора? Задаю все параметры света в 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();
Мне кажется, что нормаль должна быть единичной длины. Для правильного освещения плоскости необходимо, чтобы нормаль была строго ей перпендикулярна. Возможно у тебя не так, проверь.
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().