私は実際に2つの質問があります。
私は OpenGL を学んでおり、インターネット パス ビュー マトリックス、プロジェクション マトリックス、モデル マトリックス、またはそれらの組み合わせの多くのサンプルがシェーダーにあることに遭遇しました。なぜ知りたいのですか?gl_modelview、gl_modelviewporjection などから既にそれらを持っているので、それらを均一としてシェーダーに再度渡すのは何ですか?
とにかく、シャドウ マップを作成したいのですが、座標をシャドウ マップに変換するためにシェーダーに何を渡せばよいかわかりません。標準の gl_* マトリックスを使用することを好みます。これに基づいてプログラムを既にコーディングしているためです。ここに私が今持っているコードがあります。
void FirstPass()
{
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, shadow_fbo);
glViewport(0,0,shadow_Width,shadow_Height);
glClear(GL_DEPTH_BUFFER_BIT);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
}
void SecondPass()
{
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D,shadow_texmap);
}
void display(void)
{
glUseProgramObjectARB(0);
float myarray[16];
FirstPass();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(light_positionFix[0], light_positionFix[1], light_positionFix[2], 0, 0, 0, 0, 1, 0);
DrawObjects();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
SecondPass();
if (!LightFollowCamera)
glLightfv(GL_LIGHT0, GL_POSITION, light_positionFix);
gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], 0, 1, 0);
if (LightFollowCamera)
{
light_positionFix[0]=eye[0];
light_positionFix[1]=eye[1];
light_positionFix[2]=eye[2];
}
DrawObjects();
glutSwapBuffers ();
}