Как я могу передать несколько текстур в один шейдер?
Я использую Freeglut, GLEWи DevIL ввизуализировать текстурированный чайник используя вершинный и фрагментный шейдеры. Все это прекрасно работает в OpenGL 2.0 и GLSL 1.2 в Ubuntu 14.04.
Теперь я хочу применить карту рельефа к чайнику. Мой лектор, очевидно, не заваривает свой собственный чай, и поэтому не знает, что они должны бытьгладкий; плавный, Во всяком случае, я нашелкрасивый учебник по картографированию старой школы это включает фрагментный шейдер, который начинается:
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 передать уже заполненные маркеры текстуры фрагментному шейдеру?
(Это домашнее задание, поэтому, пожалуйста, ответьте с минимальным количеством фрагментов кода (если вообще). Спасибо!)
Если это не так, у кого-нибудь есть чайная уютная сетка?