2013-01-06 31 views
5

在使用纹理之前,我们需要在OpenGL 2.1+中调用glEnable(GL_TEXTURE)吗?如果我们遇到质感问题,可能是什么原因?在OpenGL 2.1中使用纹理之前是否需要调用glEnable(GL_TEXTURE)?

更新:

我使用OpenGL 2.1桌面,我的步骤是:

  1. 负载BMP 24位图像(我在gDebuger检查,它显示我的质地好了,我确定我的加载镜像过程没有失败)。在init() procedude

  2. 调用几个OpenGL函数:

    glGenTextures(1, &texture_id); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data); 
    
  3. 而且在draw_scene():

    glUseProgram(program); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glUniform1i(uniform_texture, 0); 
    ... 
    
  4. 顶点着色器(版本120):

    attribute vec3 vPos; 
    attribute vec2 vTexCoord; 
    
    uniform mat4 MV; 
    uniform mat4 Projection; 
    
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        fragTexCoord = vTexCoord; 
        gl_Position = Projection * MV * vPos; 
    } 
    
  5. 片段着色器:

    uniform sampler2D my_texture; 
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        gl_FragColor = texture2D(my_texture, fragTexCoord); 
    } 
    
+1

如果你使用着色器,那么我怀疑'glEnable(GL_TEXTURE)'做了什么。你能给我们一个截图吗?或者更详细地描述你的输出问题? – TheAmateurProgrammer

+0

我认为我的一些参数错误,我已清除并重写所有纹理代码,现在它工作!任何人都可以解释我在'internalFormat'中的'GL_RGBA8','GL_RGBA',...有什么不同?如果我在'internalFormat'中使用'GL_RGB',那么我可以像片段着色器那样访问alpha元素:'texture2D(myTexture,texCoord).a'? –

回答

3

如果您在OpenGL 2.1使用GLSL着色器,然后调用glEnable(GL_TEXTURE_*)已经没有意义了。您在片段着色器中应用纹理。

如果您打算转到OpenGL 3.x核心配置文件,请记住glEnable(GL_TEXTURE_*)已弃用。

相关问题