我有兩個圖像,並與指令的幫助在這裏着色器: http://en.wikibooks.org/wiki/OpenGL_Programming/Intermediate/Textures的OpenGL使用的紋理
我可以將它們存儲分開,分成兩個獨立的紋理,並將其上傳到視頻內存:
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
現在,我將如何使用着色器訪問這些紋理以使這兩個紋理相乘?
例如,我發現這個例子中,關於使用乘法着色器: http://www.opengl.org/wiki/Texture_Combiners
//Vertex shader
#version 110
attribute vec4 InVertex;
attribute vec2 InTexCoord0;
attribute vec2 InTexCoord1;
uniform mat4 ProjectionModelviewMatrix;
varying vec2 TexCoord0;
varying vec2 TexCoord1; //Or just use TexCoord0
//------------------------
void main()
{
gl_Position = ProjectionModelviewMatrix * InVertex;
TexCoord0 = InTexCoord0;
TexCoord1 = InTexCoord1;
}
//------------------------
//Fragment shader
#version 110
uniform sampler2D Texture0;
uniform sampler2D Texture1;
//------------------------
varying vec2 TexCoord0;
varying vec2 TexCoord1; //Or just use TexCoord0
//------------------------
void main()
{
vec4 texel = texture2D(Texture0, TexCoord0);
texel *= texture2D(Texture1, TexCoord1);
gl_FragColor = texel;
}
但我怎麼會讓我在頂點的形式已上傳的紋理,這樣我可以用這個片段着色器來完成這個乘法。
我所做的只是生成gluBuild2DMipmaps,但現在我不知道如何將Vertex/Fragment着色器應用於我的紋理?
你改變紋理單元(使用'glActiveTexture'調用)在應用程序中的任何地方?紋理單元只能保存單個紋理(並且mipmap堆棧被視爲單個紋理),因此要同時使用兩個紋理,則需要在上傳之前更改紋理單元。 – radical7 2013-03-04 19:02:50
@ radical7:不,我沒有,但考慮如果我這樣做,仍然如何讓我的紋理被視爲頂點? – user2112840 2013-03-04 19:14:59
@ user2112840:作爲頂點的紋理?說真的,你應該讓你的術語和OpenGL基礎紮實。你必須通過的是用作統一的紋理單元。我強烈建議你先通過一些很好的教程,比如Nicol Bolas的教程:http://www.arcsynthesis.org/gltut – datenwolf 2013-03-04 19:20:39