Я сейчас работаю над простой 3D-сценой в OpenGL3.3, но при попытке текстуры объектов - все они текстурированы полностью черными. Однако, если я изменил версию контекста на 3.1; у него нет проблем с правильной обработкой текстур над моделями.Текстуры OpenGL все черные в 3.3 - но работают в 3.1
Я не уверен, что это говорит о том, что я использую устаревшие функции/методы, но я изо всех сил пытаюсь понять, где проблема.
Настройка текстуры
(load texture from file)
...
glGenTextures(1, &TexID); // Create The Texture (CHANGE)
glBindTexture(GL_TEXTURE_2D, TexID);
glTexImage2D(GL_TEXTURE_2D, 0, texture_bpp/8, texture_width, texture_height, 0, texture_type, GL_UNSIGNED_BYTE, texture_imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
...
Привязка текстуры Отдавать
// mLocation is the layout location in the shader, from glGetUniformLocation
// mTextureUnit is the specified texture unit to load into. Currently using 0.
// mTextureID is the ID of the loaded texture, as generated above.
glActiveTexture(GL_TEXTURE0 + mData.mTextureUnit);
glBindTexture(GL_TEXTURE_2D, mData.mTextureID);
glUniform1i(mLocation, mData.mTextureUnit);
пиксельный шейдер
uniform sampler2D diffusemap;
in vec2 passUV;
out vec3 outColour;
...
outColour = texture(diffusemap, passUV).rgb;
Все используемые текстуры имеют мощность 2, квадратные размеры.
Изображения, показывающие проблему.
GL3.1: http://i.imgur.com/NUgj6vA.png
GL3.3: http://i.imgur.com/oOc0jcd.png
вершинных шейдеров
#version 330 core
uniform mat4 p;
uniform mat4 v;
uniform mat4 m;
in vec3 vertex;
in vec3 normal;
in vec2 uv;
out vec3 passVertex;
out vec3 passNormal;
out vec2 passUV;
void main(void)
{
gl_Position = p * v * m * vec4(vertex, 1.0);
passVertex = vec3(m * vec4(vertex, 1.0));
passNormal = vec3(m * vec4(normal, 1.0));
passUV = uv;
}
Как выглядит ваш вершинный шейдер? – scones
Добавил его внизу для вас. Но что касается текстурирования, он просто передает данные UV в шейдер фрагмента без каких-либо преобразований. Просто для обеспечения правильной передачи UVs/не проблема - я быстро визуализировал UVs как цвет (красный, зеленый). Кажется, что UV-данные попадают в frag-шейдер без проблем: http://imgur.com/N4Zp0ir – Bilkokuya