3

GLSL phong シェーディング コードをデバッグするためのヘルプを探しています。ここに私の頂点シェーダーがあります:

layout(std140) uniform Matrices {
    mat4 model[1024];
};

layout(location = 0) in vec4 vertexCoord;
layout(location = 2) in vec3 vertexNormal;

uniform mat4 view; // from lookAt() 
uniform mat4 projection; // perspective projection 

out vec3 Position;
out vec3 Normal;
out vec4 lightPosEye;

void main() {
    mat4 modelView = view * model[gl_InstanceID];
    mat3 normalMatrix = mat3(transpose(inverse(modelView)));
    //mat3 normalMatrix = mat3(modelView);

    vec4 lightPos = vec4(350, 350, 350, 1);
    lightPosEye = modelView * lightPos;

    Position = vec3(modelView * vertexCoord);
    Normal = normalize(normalMatrix * vertexNormal);

    gl_Position = projection * vec4(Position, 1.0);
}

ここに私のフラグメントシェーダーがあります:

in vec3 Position;
in vec3 Normal;
in vec4 lightPosEye;

layout(location = 0) out vec4 FragColor;

vec3 ads() {
    vec3 Ka = vec3(0, 0.5, 0);
    vec3 Kd = vec3(0, 0.5, 0);
    vec3 Ks = vec3(0, 0.1, 0);
    vec3 intensity = vec3(0.3, 0.5, 0.0);
    float shininess = 0.1;

    vec3 n = normalize(Normal);
    vec3 s = normalize(vec3(lightPosEye) - Position);
    vec3 v = normalize(vec3(-Position));
    vec3 r = reflect(-s, n);

    return intensity * (Ka + Kd * max(dot(s, n), 0.0) + Ks * pow(max(dot(r,v), 0.0), shininess));
}

void main() {
    FragColor = vec4(ads(), 1);
}

結果のスクリーンショットを次に示します (デバッグ目的で、別のジオメトリ シェーダーを使用して法線もレンダリングしています)。

レンダリング結果

立方体のアーティファクトは正しくなく、カメラを移動すると (ビュー マトリックスを変更すると)、円の「影」も少し移動します。

GLSL コードに明らかなエラーはありますか?

4

0 に答える 0