2013-05-20 24 views
-1

我知道如何加载纹理如何使用GL图像加载纹理?

std::unique_ptr<glimg::ImageSet> pImgSet(glimg::loaders::dds::LoadFromFile("test.dds")); 
GLuint tex = glimg::CreateTexture(pImgSet.get(), 0); 

但我怎么得到这个纹理到我着色器? GL Image - Unoffcial OpenGL SDK

+0

这不是简单的OpenGL。你在使用什么框架/库? – Thomas

+0

@Thomas:[This one。](http://glsdk.sourceforge.net/docs/html/index.html)它也只是纹理加载代码;这完全不相关。 –

+0

“*但我该如何将这种纹理加入到我的着色器中?”[与您对其他OpenGL纹理所做的相同。](http://www.opengl.org/wiki/Sampler_%28GLSL%29)GL Image只是为你加载纹理;你如何使用它取决于你。 –

回答

2

将纹理绑定到纹理单元,例如,单位0:

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex); 

添加sampler2D制服你的shader:

uniform sampler2D myTexture; 

设置均匀纹理单元的数量,作为一个整数:

glUseProgram(program); 
GLint location = glGetUniformLocation(program, "myTexture"); 
glUniform1i(location, 0); 

在着色器,请使用texture2D进行取样,例如:

gl_FragColor = texture2D(myTexture, texCoords); 

要知道的关键是制服可以设置为整数;将其设置为1表示使用绑定到GL_TEXTURE1的纹理,依此类推。统一的值默认为0,并且活动纹理单位默认为GL_TEXTURE0,所以如果只使用一个纹理单位,则甚至不需要设置统一。

+0

好吧,我想我现在理解采样器对象。像这样的代码http://open.gl/content/code/c3_basic.txt完全混淆了我。非常感谢。 –