0

我对网格本身的操作没有任何问题,但是每个瓦片(基本上是 4 个顶点的正方形,整个地形网格由瓦片网格组成)必须能够被赋予我选择的不同纹理。所以到目前为止,我只能给网格 1 纹理并通过更改顶点缓冲区中 CUSTOMVERTEX-es 的 UV 值使其重复。但是我不能像这里一样制作不同的瓷砖纹理:http: //classic.battle.net /war3/images/neutral/heroes/ss02.jpg - 你可以看到侧面有草瓦和一些泥瓦,左边有一些砾石。

我有一个愚蠢的想法,将每个瓷砖制作成单独的网格,但这只是......更重,纹理没有很好地夹住。我确信必须有一些功能让我纹理单独的地形网格:(

4

1 回答 1

1

一种方法是使用 alpha 贴图来定义纹理在地形上的位置。通常您将 4 个或更多纹理绑定到一个着色器并使用另一个纹理和它的 rgba 组件来定义纹理应该出现的位置。

假设您有草、泥土、沙子和雪以及 alpha 贴图纹理。红色组件控制草的可见性,绿色组件控制泥土,蓝色组件控制沙子,阿尔法组件控制雪。

在像素着色器中,您从 alphamap 读取,然后使用您从草、沙、泥雪纹理混合的 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; 

如您所见,如果在 alpha 贴图中您的颜色值为 0,0,1,0,则该片段将是沙子,依此类推。

此视频中的地形是通过这种技术纹理化的: http ://www.youtube.com/watch?v=-mBpMYYtJCo

您也可以使用 8 个纹理和 2 个 alpha 贴图。

希望有帮助。

于 2012-05-02T19:20:15.663 回答