2013-05-20 22 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完全混淆了我。非常感謝。 –