私は教科書でOpenGLを使っていましたが、私はフラグメントシェーダに問題があります。私はテクスチャメッシュに基本的な方向性ライティングを追加しようとしています。テクスチャを照明なしで上手く見せることができました。オープンGL(GLSL) - 方向性の照明の遺跡テクスチャ
私は照明を追加するときしかし、それは、テクスチャのoveral色を保持しますが、すべて一緒に、テクスチャのディテールを削除します。
私はそれを引き起こしているかわからないんだけど、と私はオンライン解決策を見つけるように見えることはできません。ご協力いただきありがとうございます。
バーテックスシェーダ
#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);
}
動作しませんでした...ありがとうございます。 –
'vec4(vec3(result)、1.0)*'部分を削除して、テクスチャがまだ見えるか、または上の画像で行ったことがありますか? – TWT
@thokra:OPは伝統的な列ベクトルではなく行ベクトルを使用するように見えるので、右に掛ける。コンピュータグラフィックスで行うことは珍しいことですが、このコンベンションに固執すれば、実際にサポートされていると思います。 – ybungalobill