Окружающее освещение в некотором шейдерном коде - PullRequest
0 голосов
/ 03 марта 2011
        #version 150 core
in vec3 pos;
in vec3 vshade;
in vec3 normal;
out vec3 cshade;
out float shadescale_o;
out vec3 v_o;
out vec3 locallight_o;
out vec3 n;
uniform float pscale;
uniform mat3 rotation_projection;
uniform vec3 objcentre_to_eye_projected;
uniform vec3 light_in_object_coords;
uniform vec3 view_in_object_coords;
void main()
{
//do it all without homogenous co-ords
    vec3 transpos;
    vec3 h,v;   
    vec3 locallight=light_in_object_coords-pos; //subtract because of light direction
    transpos.xyz=rotation_projection*pos.xyz+objcentre_to_eye_projected;
    gl_Position.w= transpos.z;
    transpos.z-=pscale;
    gl_Position.xyz=transpos;
    v=view_in_object_coords+pos;
    n=normal;
    v_o=v;
    v=normalize(v);
    locallight_o=locallight;
    locallight=normalize(locallight);
    h=v-locallight; //light direction shines from source to object
    h=normalize(h);
    shadescale_o= dot(h,normal); //inward normal
    if (shadescale_o<0)
        shadescale_o=0;
    shadescale_o*=shadescale_o;
    shadescale_o*=shadescale_o;

    shadescale_o= dot(locallight,normal);//diffuse

    cshade=vshade;//*(shadescale_o);

}

Это мой код шейдера, который подается в программу в виде строки и в основном просто отображает куб с локальным освещением.

Мне нужно знать, как реализовать окружающее освещение с помощью этого кода,чтобы осветить весь куб (и все остальное в сцене).

Он основан на фреймворке openGL, и все, что отображается, выполняется этим кодом ... да, это домашняя работа !!

1 Ответ

1 голос
/ 03 марта 2011

В любом случае вы рассчитываете диффузные коэффициенты для каждого цвета (по крайней мере, я предполагаю, что это правильно, это ваша домашняя работа), так что вы можете просто добавить постоянный коэффициент окружающей среды.

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