阴影贴图和标准的gl矩阵变量?

时间:2013-10-30 22:34:10

标签: opengl glsl shader

我实际上有两个问题。

我正在学习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 ();
}

1 个答案:

答案 0 :(得分:0)

许多这些着色器变量仍然有效,但自OpenGL 3以来已弃用。有关现有内置变量的最新列表,请查看this monstrous pdf的第7页。过时的变量甚至都没有被提及。 pdf是最新版本的OpenGL,你不应该以初学者为目标,因为你不需要所有的尖端功能。 OpenGL 3.2(核心配置文件)在与4.x的兼容性方面完全没有问题,图形供应商提供支持,您将找到初学者所需的所有功能。看看quick reference card。旧的内置变量仍然在3.2中提到,但被标记为已弃用。经常使用的术语现代OpenGL 与OpenGL 3.x核心简介或更高版本有关。