передать карту текстуры в другой фрагментный шейдер - PullRequest
0 голосов
/ 24 апреля 2019

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

(1)
// setup frame buffer and depth buffer for the two fragment shaders.


(2)
// texture map generating frag shader:

uniform sampler2D texturemap;

void main(){
    // generate texture map
    vec4 coorindate_value = ...;
    output_texture = texture( texturemap , coorindate_value );
    // my understanding is that that sampler2d will generate some kind of a mapping. how can I map coorindate_value to some other vec4, like another vec4 coordinate???
}


(3)
// second fragment shader:

uniform sampler2D same_texturemap;

void main(){
    vec4 coorindate_value = ...;
    vec4 value = texture2D( same_texturemap , coorindate_value );
    // the returned value should be one of the color values from the first fragment shader, correct??

}

Я не ищу никого, кто бы предоставил код, который обязательно помог бы мне здесь, но просто чтобы получитьнекоторое подтверждение того, что у меня есть понимание того, как это может работать. Полагаю, моя главная путаница в том, что на самом деле делает sampler2D.Похоже ли это на словарь или хэш-таблицу в том смысле, что он сопоставляет два значения, и если да, то как мне выбрать эти два значения? Любые советы или исправления были бы хорошими.

1 Ответ

0 голосов
/ 25 апреля 2019

A sampler2D является ссылкой на единицу текстуры. Единица текстуры содержит ссылку на текстуру. Текстура - это двумерный массив данных, из которого вы можете извлечь данные с помощью функции texture2D. Вы передаете ему шаблон sampler2D и нормализованную текстурную координату. Возвращает выборочное значение из текстуры. Я говорю выборочное значение, потому что то, как это значение генерируется, зависит от настроек фильтра текстуры.

Вывод в WebGL осуществляется через специальную переменную gl_FragColor. Вывод идет в текущий кадровый буфер на холст, если ни один кадровый буфер не связан.

Вам, вероятно, нужно прочитать некоторые учебники по webgl . Вот один специально для текстур , а также рендеринга в текстуру , но если вы не знакомы с остальной частью WebGL, вам, вероятно, придется прочитать предыдущие статьи.

...