如何使用多个纹理在XNA4中构建圆柱体?

时间:2011-08-17 19:48:36

标签: xna xna-4.0 texturing cylindrical

基本上,我正试图在外部覆盖一个带有多个均匀间隔纹理的老虎机卷轴(白色圆柱型)。该程序将仅为Windows,并且纹理将在运行时动态加载,而不是使用内容管道。 (使用Microsoft示例中的XNA进行基于Windows的多屏幕设置)

我在网上可以找到的大部分例子都是针对XNA3的,此时我仍然看似胡言乱语。

所以我正在寻找任何人可以提供的关于游戏纹理化对象的帮助,例如具有多个纹理的圆柱体。

也许有一本好书可以正确描述纹理在XNA(4.0专用)中是如何工作的?

由于

1 个答案:

答案 0 :(得分:2)

您有几个选择。这取决于两件事:模型是在运行时加载还是生成,以及您的多个纹理是组合成一个还是保持个体。

如果您具备艺术技能或了解艺术家,可能最简单的方法是让他们根据您的需要(多种材质)使用尽可能多的纹理对圆柱进行纹理贴图。您希望Model每个纹理需要一个网格(ModelMesh)和一个材质(ModelMeshPart)。这假设圆柱体总是具有固定数量的纹理!然后,要在运行时交换纹理,您将遍历ModelMesh.Effects集合,将每个集合转换为BasicEffect并设置它的Texture属性。

如果您无法修改模型,则必须生成它。在AppHub网站上有一个例子:http://create.msdn.com/en-US/education/catalog/sample/primitives_3d。它可能不会生成纹理坐标,因此您需要添加它们。如果你想要每个柱面5个图像,你应该确保段的数量是5的倍数,并且V坐标应该从0到1,在环绕圆柱体时的5倍。要使用此技术保持纹理个性化,您需要以5个块绘制圆柱体,每次都将GraphicsDevice.Textures[0]设置为当前纹理。

使用这两种技术,可以在一次绘制调用中绘制圆柱体,但是您需要使用Texture2D.GetDataTexture2D.SetData将纹理合并为单个纹理。这样会更有效率,但真的不值得麻烦。好吧,除非你制造某种疯狂的老虎机粒子系统。