OpenGL шейдер, какое значение по умолчанию для sampler2D - PullRequest
1 голос
/ 24 апреля 2020

Я очень новичок в OpenGL и в шейдерах, и я немного экспериментировал с отправкой нескольких текстур в шейдеры, где заметил что-то странное.

Итак, вот что у меня было. У меня был фрагментный шейдер, который выглядел следующим образом.

#version 440 core

in vec3 vs_position;
in vec3 vs_color;
in vec2 vs_texcoord;
in vec3 vs_normal;

out vec4 fs_color;

uniform sampler2D texture0;
uniform sampler2D texture1;


void main() {
    fs_color = texture(texture0, vs_texcoord) * texture(texture1, vs_texcoord);
}

, и в какой-то момент я прекратил отправлять данные для texture1, но забыл удалить код из шейдера. Очевидно, это была ошибка, и программа работала не так, как предполагалось, но я заметил, что цвета выглядели более глубокими и не такими плоскими, когда у меня была эта ошибка, по сравнению с тем, когда я исправлял свой код и удалял материал, связанный с texture1, из шейдера.

Так вот, что у меня было

enter image description here

Теперь я понимаю, что, как только я добавлю правильное освещение и все текстуры больше не будут выглядеть плоскими но я все еще не понимаю, что именно происходит, когда я умножаю данные texture0 (фактуру, которую я фактически установил) на данные texture1 (это не устанавливается).

Что такое значение по умолчанию для sampler2D и что вызывает этот сдвиг цвета?

1 Ответ

3 голосов
/ 24 апреля 2020

По умолчанию сэмплеры привязаны к единице текстуры 0. Я полагаю, что у вас может получиться, что вы также прикрепили единицу текстуры от 0 до texture0 и, по сути, умножили текстуру на себя.

...