2016-10-27 2 views
0

私は教科書でOpenGLを使っていましたが、私はフラグメントシェーダに問題があります。私はテクスチャメッシュに基本的な方向性ライティングを追加しようとしています。テクスチャを照明なしで上手く見せることができました。オープンGL(GLSL) - 方向性の照明の遺跡テクスチャ

Mesh without Lighting

私は照明を追加するときしかし、それは、テクスチャのoveral色を保持しますが、すべて一緒に、テクスチャのディテールを削除します。

Mesh with Lighting

私はそれを引き起こしているかわからないんだけど、と私はオンライン解決策を見つけるように見えることはできません。ご協力いただきありがとうございます。

バーテックスシェーダ

#version 440 

uniform mat4 uModel; //Model Location, Rotation, Scale 
uniform mat4 uView; //Camera Location, Rotation, Scale 
uniform mat4 uProjection; //Projection Matrix 

in vec3 vPosition; 
in vec3 vNormal; 
in vec2 vTexCoords; 

out vec3 oNormal; 
out vec3 oFragPos; 
out vec2 oTexCoords; 

void main() 
{ 
    gl_Position = vec4(vPosition, 1) * uModel * uView * uProjection; 
    oFragPos = vec3(vec4(vPosition, 1) * uModel); 

    oNormal = normalize(vNormal * mat3(transpose(inverse(uModel)))); 
    oTexCoords = vTexCoords; 
} 

フラグメントシェーダ

#version 440 

//Ins 
in vec3 oNormal; 
in vec3 oFragPos; 
in vec2 oTexCoords; 

//Outs 
out vec4 fragColour; 

//Uniforms 
uniform sampler2D uTextureSampler; 

void main() 
{ 
    vec3 norm = normalize(oNormal); 

    // Phase 1: Directional lighting 
    float result = max(dot(norm, -vec3(0,0,1)),0.0); 

    fragColour = vec4(vec3(result),1.0) * texture(uTextureSampler, oTexCoords); 
} 
+0

動作しませんでした...ありがとうございます。 –

+0

'vec4(vec3(result)、1.0)*'部分を削除して、テクスチャがまだ見えるか、または上の画像で行ったことがありますか? – TWT

+0

@thokra:OPは伝統的な列ベクトルではなく行ベクトルを使用するように見えるので、右に掛ける。コンピュータグラフィックスで行うことは珍しいことですが、このコンベンションに固執すれば、実際にサポートされていると思います。 – ybungalobill

答えて

1

テクスチャの色はまだここにいます。あなたのテクスチャには1つのピクセルがサンプリングされているようです。この問題は、 "oTexCoords"値から来ているようです。

あなたは試みることがあります。

fragColour = vec4(vec3(result),1.0) * vec4(oTexCoords, 0.0, 1.0); 
をそして、あなたはキューブ全体にグリーン/レッドグラデーションを参照してくださいかどうかを確認します。

ライティングを削除すると、シェーダで照明コンポーネント(「結果」値)を使用しないと、ほとんどのコンパイラが「結果」の計算につながるコードをすべて削除します。

「結果」が削除されます。したがって、 "ノーマル"、 "ノーマル"、 "ノーマル"はすべてシェーダーから消えます。

属性の場所は変わります。私の推測では、プログラムの属性の場所とそれらの場所の「vertexAttribPointer」の取得方法から問題が発生していると思います。

+0

それを修正するために挑戦!私は私のvertexAttribPointersで間違いを犯しました。本当にありがとう。 –

関連する問題