Смешивание нескольких текстур в GLSL

Это длинный, но я обещаю, что это интересно. :)

Я пытаюсь имитировать внешний вид текстурирования другого приложения с помощью jMonkeyEngine. У меня есть список вершин и граней (треугольников), составляющих "ландшафтную сетку", которая должна быть текстурирована примерно 7-15 различными текстурами (в зависимости от ландшафта "ландшафта"). Каждый треугольник имеет связанный с ним код текстуры, обозначающий, из какой текстуры должен в основном состоять этот треугольник. И, конечно же, текстуры должны плавно переходить между гранями.

Итак, я пытаюсь разработать стратегию, которая позволяет это (в которой НЕ используются заранее созданные файлы png-альфа-карты, альфа-текстуры текстуры должны выполняться во время выполнения ). Прямо сейчас я полагаю, что если я вычислю «силу» каждой текстуры в каждой вершине (в вершинном шейдере) - с учетом типов ландшафта всех ее соседних граней (пока не знаю, как это сделать) - я смогу для установки альфа-значений в зависимости от того, насколько далеко пиксель находится от вершины.Сгенерированная «альфа-карта» будет использоваться фрагментарным шейдером для смешивания каждой текстуры на пиксель.

Возможно ли это вообще, или мне следует искать совершенно другую стратегию? У меня есть код шейдера для приложения, которое я пытаюсь имитировать (но это HLSL, а я использую GLSL), но похоже, что они делают этот шаг смешивания где-то еще:

    sampler MeshTextureSampler = sampler_state { Texture = diffuse_texture; AddressU = WRAP; AddressV = WRAP; MinFilter = LINEAR; MagFilter = LINEAR; }; 

Я не уверен, что это HLSL "MeshTextureSampler" есть, но кажется, что это приложение могло предварительно смешать все текстуры по мере необходимости и создать единую текстуру для всей сетки на основе данных кода лица / местности. В пиксельном / фрагментном шейдере все, что они действительно делают, это следующее:

float4 tex_col = tex2D(MeshTextureSampler, In.Tex0);

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

6
задан Manius 3 July 2011 в 18:13
поделиться