在顶点缓冲区上平铺纹理? (Windows Phone 7 / XNA)

时间:2010-12-15 10:26:11

标签: graphics windows-phone-7 xna textures

我正在创建基于平面顶点的几何体,目的是为2D侧卷轴式游戏创建2D地形。

到目前为止,我可以精确地创建顶点缓冲区并绘制任何三角形到我想要的屏幕。但是我有纹理问题。如何使用瓷砖对三角形进行纹理化(如果它甚至可能的话)。我正在使用BasicEffect类。

在所有顶点上设置UV数据的好算法是什么,这样纹理将无缝地平铺所有顶点?

我目前的想法是获得最左边和最右边的顶点(以及最顶部,最底部),根据它得出整个几何体的尺寸,然后遍历每个三角形并设置其顶点的UV(基于三角形宽度/高度)到一个值,它将使用一些纹理,使它将混合到下一个(即一个顶点UV将是0.1,0.3,下一个将是0.2,0.4)。 / p>

这看起来有点复杂并且有一个巨大的退缩,瓷砖的大小必须大于最大三角形面的大小,但这是我能想到的唯一方法。我已经尝试使用谷歌搜索解决方案,或者至少是其他人按照我的方式做了同样的事情,但却什么都没有。

1 个答案:

答案 0 :(得分:3)

是的,你必须找到一个算法才能正确设置你的tex坐标...不幸的是你的纹理和你的几何形状的功能,所以我不确定我们能够提供多少帮助

就技术位而言,您应该能够将TextureAddressMode设置为Wrap,GPU将根据UV对其进行相应的采样以对其进行平铺。

graphics.GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap;  
graphics.GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap;