Почему не работает мой рассеянный свет? - PullRequest
0 голосов
/ 04 июня 2011

Большая часть моего освещения работает так, как я хочу, но мне кажется, что мне не хватает окружающего освещения.То есть стороны от солнца полностью черные (я надеялся на 50% окружающей среды), в то время как стороны от солнца выглядят освещенными, как я и ожидал.

Вотмой код настройки освещения (отредактированный с оригинала, см. примечание ниже):

- (void) setupLighting
{
    const float amb = 2.0;
    const float LightAmbient[][4]  = {  { amb, amb, amb, 1.0f },
                                        { amb, amb, amb, 1.0f }
                                    };
    const float LightDiffuse[] [4] = {  { 1.0f, 1.0f, 1.0f, 1.0f },
                                        { 1.0f, 1.0f, 1.0f, 1.0f }
                                    };
    const float LightPosition[][4] = {  { 1.0f,  4.0f, 2.0f, 0.0f },
                                        { 0.0f, 10.0f, 0.0f, 1.0f }
                                    };

    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient[0]);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse[0]);
    glLightfv(GL_LIGHT0, GL_POSITION, LightPosition[0]);

    glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient[1]);
    // etc., snip -- no LIGHT1 for this round

    glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glEnable(GL_COLOR);
    //glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHT0);
    //glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);
}

(ПРИМЕЧАНИЕ: LIGHT1 пока что закомментирован - я просто пытаюсь заставить LIGHT0 делать то, что я хочу.)

Не уверен, имеет ли это значение, но я рисую юнит-выровненные юнит-кубы с текстурным отображением (в стиле MineCraft), используя glDrawArrays ().Все мои нормы кажутся правильными;если я выключу освещение, все отрисовывается правильно (только с плоским освещением).

Любые подсказки?

Спасибо!

Редактировать (Добавлен скриншот.)

Here's a screenshot of the problem

Редактировать В комментариях я увеличил значения окружения до 2,0, и теперь это выглядит так, как я ожидал для примерно 50% окружения.Это кажется странным - я думал, что значения освещения были закреплены на [0, 1] ...?Какую фундаментальную концепцию об окружающем свете я не придумываю?

1 Ответ

2 голосов
/ 05 июня 2011

В вашем коде вы не включили GL_COLOR_MATERIAL.Поэтому, если вы не установили цвет окружающего материала (вызывая glMaterial с GL_AMBIENT), по умолчанию используется значение (0,2, 0,2, 0,2), что должно привести к вашему скриншоту при умножении на (1,1,1) (окружающий свет).

Кроме того, нет необходимости использовать значения цвета больше 1, так как они все равно ограничены [0,1].

...