我正在使用freeglut、GLEW 和DevIL 来 渲染一个带纹理的茶壶, 并使用顶点和片段着色器。在Ubuntu 14.04上,这一切都在OpenGL 2.0和GLSL 1.2上正常工作。
现在,我想为茶壶应用一个凹凸贴图。我的讲师显然不亲自泡茶,所以他不知道它们应该是光滑的。无论如何,我找到了一个看起来不错的旧式凹凸贴图教程,其中包括一个以以下代码开头的片段着色器:
uniform sampler2D DecalTex; //The texture
uniform sampler2D BumpTex; //The bump-map
他们没有提及如何将两个纹理传递给着色器。
以前我
//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);
//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
//Fragment shader
gl_FragColor = color * texture2D(DecalTex,gl_TexCoord[0].xy);
所以现在我
//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);
glBindTexture(GL_TEXTURE_2D, bumpHandle);
//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1;
//Fragment shader
gl_FragColor = color * texture2D(BumpTex,gl_TexCoord[0].xy);
//no bump logic yet, just testing I can use texture 1 instead of texture 0
但是这并不起作用。纹理完全消失了(实际上茶壶是白色的)。我尝试过GL_TEXTURE_2D_ARRAY、glActiveTexture和其他一些看似有希望但毫无结果的选项。
在查阅了通常混杂着OpenGL和GLSL新旧参考资料之后,我得出结论,我可能需要使用
glGetUniformLocation
。我应该如何在OpenGL cpp文件中使用它,将已填充的纹理句柄传递给片段着色器?
(This is homework so please answer with minimal code fragments (if at all). Thanks!)如果不行的话,有人有茶壶套网吗?