我正在使用 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 文件中使用它来将已经填充的纹理句柄传递给片段着色器?
(这是作业,所以请用最少的代码片段(如果有的话)回答。谢谢!)
如果做不到这一点,有人有茶舒适网吗?