Я использую 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 для передачи уже заполненных дескрипторов текстуры фрагментному шейдеру?
- Как передать массив текстур разных размеров в GLSL?
- Передача нескольких Текстуры из OpenGL в шейдер GLSL
- Несколько текстур в GLSL - работает только одна
(Это домашнее задание, поэтому, пожалуйста, ответьте минимальным количеством фрагментов кода (если вообще). Спасибо!)
А если нет, есть ли у кого-нибудь уютная сеточка для чая?