3

GLSL/openGL で非常に単純な拡散シェーダーを実装しようとしています。ここに私が得たものがあります: 頂点シェーダー:

#version 130

in vec3 vertPos3D;
in vec3 vertNormal3D;

uniform mat3 transpMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

uniform vec3 lightPosition;

varying vec3 vertNormal;
varying vec3 lightVector;

void main() 
{ 
    vec4 res_pos = projectionMatrix * viewMatrix * vec4(vertPos3D.xyz, 1.0);
    gl_Position = res_pos;
    mat4 pm = projectionMatrix * viewMatrix;
    vertNormal = (viewMatrix * vec4(vertNormal3D, 0)).xyz;
    lightVector = (viewMatrix * vec4(lightPosition, 1.0)).xyz - (viewMatrix * vec4(vertPos3D.xyz, 1.0)).xyz;
}

フラグメント シェーダー:

#version 130
out vec4 color; 

varying vec3 lightVector;
varying vec3 vertNormal;
void main()
{
    float dot_product = max(normalize(dot(lightVector, vertNormal)), 0.0);
    color = dot_product * vec4( 1.0, 1.0, 1.0, 1.0 );
}

最終的な色に dot_product を掛けるとすぐに、何も表示されません。dot_product を削除すると、すべてが機能します (拡散雷を除く)。私が見逃しているのは明らかなことだと思います。

4

2 に答える 2