За пиксельное освещение в современном GLSL? - PullRequest
3 голосов
/ 18 сентября 2010

Я ищу правильный простой пример.

Прямо сейчас у меня было что-то, основанное на уроке, но я не вижу изменений в середине треугольников. Кажется, каждый треугольник меняет цвет, но только в целом.

out vec3 vertex_normal;         
out vec3 vertex_light_position; 

.. на вершинном шейдере.

с

vertex_normal = normalize(NormalMatrix * in_Normal);

// old gl_NormalMatrix: "transpose of the inverse of the upper
// leftmost 3x3 of gl_ModelViewMatrix"

mat3 NormalMatrix = transpose(
                        inverse(
                            mat3(

                                ModelViewMatrix

                            )
                        )
                    );

и на фрагментном шейдере:

float diffuse_value = MAX(dot(vertex_normal, vertex_light_position), 0.0);

gl_FragColor =  out_Color * diffuse_value

Но, как я уже сказал, каждый треугольник выглядит сплошным цветом (который изменяется только целиком).

Я слышал, что нормализация может играть роль, но если я нормализую () vertex_normal, это тот же результат.

1 Ответ

4 голосов
/ 18 сентября 2010

Проверьте свои значения для vertex_normal и vertex_light_position. Вы можете сделать это, сделав фрагментный шейдер:

gl_FragColor = vertex_normal

Я не уверен, что такое vertex_light_position, но похоже, что это должно быть нормальное от вершины к свету, а не абсолютное положение света.

EDIT: См http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/lighting.php

...