0

好的,所以我有我的代码来使用 C++ 和 DirectX 绘制一个大景观。我用一种纹理对其进行纹理化,然后需要添加更多纹理。我看到人们在他们有 1 个纹理图像并且图像包含 2 个纹理的情​​况下这样做。这就是我制作的,它是 256x128 的图像。我现在的问题是,由于我的地形自动生成了 UV 贴图 1 纹理的坐标,现在它同时显示了两种纹理。我需要做到这一点,所以当世界的高度足够高时,它是 1 个纹理,而下面的一切都是另一个纹理。我的UV坐标代码,

顶点[y * WIDTH * x].U = x / 1.28;

顶点[y * WIDTH * x].V = y / 1.28;

这些是我的映射坐标,X 是它正在绘制的顶点的当前 X 值,Y 值是它当前的 y 位置。高度图是 128x128,所以我除以 1.28 以使每个多边形都有贴图 UV 贴图。高度也被计算出来,因为我正在加载一个高度图并且我试图得到它,所以当它足够高时,它会 UV 映射图像的一半,如果它是另一个,它会 UV 映射图像的另一侧。有人请帮忙!

4

1 回答 1

0
bool topTexture = height[x][y] > threshold;
float u = x / 1.28;
float v = y / 1.28;
Vertices[y * WIDTH * x].U = (u - (int)u) / 2 + (topTexture ? 0.5 : 0);
Vertices[y * WIDTH * x].V = (v - (int)v) / 2 + (topTexture ? 0.5 : 0);

您可能希望在阈值级别混合两种纹理。然后,您必须在 PixelShader 中进行操作。

于 2012-08-20T17:56:33.650 回答