Я пытаюсь показать на экране текстуру в оттенках серого. Я создаю свою текстуру через
glGenTextures(1, &heightMap);
glBindTexture(GL_TEXTURE_2D, heightMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 512, 512, 0, GL_RED, GL_FLOAT, colorData);
colorData — это число с плавающей запятой [512 * 512] со значениями от 0,0 до 1,0.
При рендеринге я использую:
glBindTexture(GL_TEXTURE_2D, heightMap);
glUniform1i(shader.GetUniformLocation("textureSampler"), 0);
shader.GetUniformLocation — это функция библиотеки, которую мы используем в университете. По сути, это то же самое, что и glGetUniformLocation (шейдер, «textureSampler»), так что не смущайтесь.
Я рендеринг двух треугольников через полосу треугольника. Мой фрагментный шейдер:
#version 330
layout(location = 0) out vec4 frag_color;
in vec2 texCoords;
uniform sampler2D textureSampler;
void main()
{
frag_color = vec4(texture(textureSampler, texCoords).r, 0, 0, 1);
}
Я знаю, что треугольники отображаются правильно (например, если я использую vec4 (1.0, 0, 0, 1) для frag_color, я получаю полностью красный экран). Однако, с помощью строки выше, я получаю только полностью черный экран. Каждое значение текстуры кажется равным 0.0.
У кого-нибудь есть идеи, что я сделал не так? Есть ли ошибки в этих нескольких строках кода или они абсолютно правильные, а ошибка в другом месте?
Как сказано в одном из комментариев ниже, настройка glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); и glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); решает проблему. 🙂
Других решений пока нет …