我如何才能正确地将其转换为UV贴图?

时间:2012-08-18 00:28:39

标签: c++ directx uv-mapping

好吧,所以我有我的代码使用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。高度也是计算好的,因为我正在加载一个高度图,我试图得到它,所以当它足够高时它会映射图像的一半,如果它是另一个,它会映射图像的另一面。有人请帮忙!

1 个答案:

答案 0 :(得分: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中完成它。