私が達成しようとしていること:シーンの上にシーンの深度マップを描画する(オブジェクトが近くにあると暗くなり、遠くにあると明るくなるように)
問題:頂点シェーダーからフラグメントシェーダーに正しいテクスチャ座標を渡す方法がわからないようです。
そこで、FBOと、深度マップが描画されるテクスチャを作成しました...自分が何をしていたかが完全にわかっているわけではありませんが、何であれ、機能します。固定機能パイプラインを使用してテクスチャを描画することをテストしましたが、想定どおりのように見えます(つまりデプスマップ)。
しかし、シェーダーで使用しようとしても機能しません...
テクスチャをバインドするrenderメソッドの部分は次のとおりです。
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D, depthTextureId);
glUniform1i(depthMapUniform, 7);
glUseProgram(shaderProgram);
look(); //updates my viewing matrix
box.render(); //renders box VBO
だから...そうですね。多分?テクスチャ7が、私がチェックしていたチュートリアルにあったものだった理由はわかりません...
そして、これが私の頂点シェーダーからの重要なものです:
out vec4 ShadowCoord;
void main() {
gl_Position = PMatrix * (VMatrix * MMatrix) * gl_Vertex; //projection, view and model matrices
ShadowCoord = gl_MultiTexCoord0; //something I kept seeing in examples, was hoping it would work.
}
Aaand、フラグメントシェーダー:
in vec4 ShadowCoord;
in vec3 Color; //passed from vertex shader, didn't include the code for it though. Just the vertex color.
out vec4 FragColor;
void main(
FragColor = vec4(texture2D(ShadowMap,shadowCoord.st).x * vec3(Color), 1.0);
ここで問題となるのは、フラグメントシェーダーがテクスチャに対して受け取る座標が常に(0,0)、つまり左下隅であるということです。ShadowCoord = gl_MultiTexCoord7に変更してみました。これは、テクスチャをスロット番号7に配置することに関係があると考えたためです...しかし、残念ながら、問題は解決しませんでした。(0、0)の色が変わると、適切なピクセル/フラグメントのみの色が変わるのではなく、シーン全体の色も変わります。
そして、それは私がいくつかの洞察を得ることを望んでいることです...正しい座標を渡す方法(テクスチャの角が私の画面の角と同じ座標になりたいです)。はい、これは初心者の質問です...しかし、私はOrange Bookを調べていました。問題は、GLSL側では優れているということですが、OpenGL側では、次のような例が大幅に不足しています。私は本当に使うことができました...