Можно ли смешивать цвета и использовать освещение в одной шейдерной программе? - PullRequest
0 голосов
/ 27 марта 2019

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

Мои шейдеры выглядят так:

<script id="vertex-shader" type="notjs">#version 300 es
        in vec3 a_position;
        in vec3 a_normal;
        //in vec4 a_color;

        uniform mat4 u_model_matrix;
        uniform mat4 u_view_matrix;
        uniform mat4 u_projection_matrix;

        uniform mat4 u_normal_matrix;   
        uniform vec3 u_material_diffuse;
        uniform vec3 u_light_diffuse;   
        uniform vec3 u_light_direction; 

        out vec4 v_color;

        void main() {
            gl_PointSize = 10.0;
            gl_Position = u_projection_matrix * u_view_matrix * u_model_matrix * vec4(a_position, 1.0);
            vec3 corrected_a_normal = vec3(u_normal_matrix * vec4(a_normal, 1.0));

            vec3 normalized_a_normal = normalize(corrected_a_normal);
            vec3 normalized_u_light_direction = normalize(u_light_direction);
            float lambert_coefficient = dot(-normalized_u_light_direction, normalized_a_normal);
            lambert_coefficient = max(lambert_coefficient, 0.0);
            vec3 diffuse_color = u_light_diffuse * u_material_diffuse * lambert_coefficient;
            v_color = vec4(diffuse_color,1.0);
        } 
</script>

<script id="fragment-shader" type="notjs">#version 300 es
        precision mediump float;
        in vec4 v_color; 
        out vec4 outColor;

        void main() {
            outColor =  v_color;
        }
</script>

1 Ответ

1 голос
/ 27 марта 2019

Вы можете смешивать цвета так, как вам хочется.

Звучит так, как будто вы имеете в виду, можете ли вы использовать вершинные цвета и освещение одновременно.

Да

in vec4 a_color;

...

vec3 diffuse_color = u_light_diffuse * 
                     u_material_diffuse * 
                     a_color *
                     lambert_coefficient;

Например, один из способов «смешать» эти цвета.

...