0

私は実際に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 ();
}
4

1 に答える 1