2012-04-28 2 views
0

У меня нет проблем с управлением самой сеткой, но каждая плитка (которая в основном представляет собой квадрат из 4 вершин и всей сетки ландшафта, сделана из сетки плиток) должна иметь возможность получить другую текстуру по моему выбору . Далеко я могу дать текстуру mesh 1 и сделать ее повторяющейся, изменив UV-значения CUSTOMVERTEX-es в буфере вершин. Однако я не могу создавать разные текстуры плитки, например, здесь: http://classic.battle.net/war3/images/neutral/heroes/ss02.jpg -Вы можете видеть, что там есть травяная плитка и некоторые грязевые плитки сбоку, а некоторые гравий слева.Как текстурировать плиточный 3D-ландшафт в DirectX9 C++?

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

ответ

1

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

Скажем, у вас есть трава, грязь, песок и снег и текстура альфа-карты. Красный компонент контролирует видимость травы, зеленый компонент контролирует грязь, синий компонент контролирует песок и букву компонент контролирует снег.

В пиксельном шейдере вы читаете из альфа-карты, а затем используете значения в компонентах rgba, которые вы смешиваете из травы, песка, текстур грязной снежинки.

Некоторые псевдо-код:

float4 mix = sampler.read(alphaTexture,alphaTexCoord); 
float4 finalColor = sampler.read(grassTexture,texCoord) * mix.r + 
        sampler.read(dirtTexture,texCoord) * mix.g + 
        sampler.read(sandTexture,texCoord) * mix.b + 
        sampler.read(snowTexture,texCoord) * mix.a; 

Как вы можете увидеть, если в альфа-карте у вас есть значение цвета 0,0,1,0, что фрагмент будет песок и так далее.

Местность в этом видео текстурированный по этой методике: http://www.youtube.com/watch?v=-mBpMYYtJCo

Вы можете использовать 8 текстуры и 2 альфа-карта тоже.

Надеюсь, что это поможет.

Смежные вопросы