我知道如何加载纹理如何使用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
我知道如何加载纹理如何使用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:
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
,所以如果只使用一个纹理单位,则甚至不需要设置统一。
好吧,我想我现在理解采样器对象。像这样的代码http://open.gl/content/code/c3_basic.txt完全混淆了我。非常感谢。 –
这不是简单的OpenGL。你在使用什么框架/库? – Thomas
@Thomas:[This one。](http://glsdk.sourceforge.net/docs/html/index.html)它也只是纹理加载代码;这完全不相关。 –
“*但我该如何将这种纹理加入到我的着色器中?”[与您对其他OpenGL纹理所做的相同。](http://www.opengl.org/wiki/Sampler_%28GLSL%29)GL Image只是为你加载纹理;你如何使用它取决于你。 –