Opengl направление света

0

Я пытаюсь настроить простой направленный свет в opengl. Код моей сцены:

float light_position[] = { 0, -1,0, 0.0f };
float light_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f };
float light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };

float mat_ambient[] = { 1.0f, 0.0f, 0.0f, 1.0f };
float mat_diffuse[] = { 0.0f, 1.0f, 0.0f, 1.0f };

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glShadeModel(GL_SMOOTH);

Затем я создаю только один треугольник:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);


glBegin(GL_TRIANGLES);
    glNormal3f(0,1,0);
    glVertex3f(0,-1,-2.0f);
    glNormal3f(0,1,0);
    glVertex3f(-1,-1,-1);
    glNormal3f(0,1,0);
    glVertex3f(1,-1,-1);
glEnd();

Я за исключением того, что свет подобен солнцу, сияющему сверху вниз (к -infinity по оси y), поэтому мой треугольник должен быть желтым (красный окружающий материал + зеленый диффуз), но мой треугольник красный, например, если есть aren Нет никакого света. Если изменить положение света на {0, 1, 0, 0}, треугольник станет желтым. Зачем? Направление света от положения, установленного на (0,0,0)?

Теги:
opengl

1 ответ

3
Лучший ответ

Интерпретация противоположна. Световая позиция { 0, -1,0, 0.0f, 0.0f } определяет свет в направлении вниз, сияющий вверх. Поэтому этот свет не осветляет ваш треугольник, в то время как свет в { 0, 1,0, 0.0f, 0.0f }.

  • 1
    Таким образом, свет всегда светит в направлении (0,0,0), от его положения?
  • 0
    Да, это правильно. Если вы не укажете другое направление (например, для точечных светильников)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню