2

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

我可以在网上找到的大多数示例都是针对 XNA3 的,目前对我来说似乎仍然是胡言乱语。

因此,我正在寻找任何人可以提供的任何帮助,以解决具有多个纹理的圆柱体等对象的游戏内纹理主题。

也许那里有一本好书可以正确描述纹理在 XNA(特别是 4.0)中的工作原理?

谢谢

4

1 回答 1

2

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

如果您有艺术技能或认识一位艺术家,可能最简单的方法是让他们使用尽可能多的纹理(多种材料)对圆柱体进行纹理映射。您希望每个所需的纹理Model都有一个网格 ( ModelMesh) 和一种材料 ( )。ModelMeshPart这是假设圆柱体始终具有固定数量的纹理!。然后,要在运行时交换纹理,您将遍历ModelMesh.Effects集合,将每个纹理转换为 aBasicEffect并设置它的Texture属性。

如果您无法修改模型,则必须生成它。AppHub 网站上有一个示例:http: //create.msdn.com/en-US/education/catalog/sample/primitives_3d。它可能不会生成纹理坐标,因此您需要添加它们。如果您希望每个圆柱体有 5 张图像,则应确保分段数是 5 的倍数,并且 V 坐标应从 0 到 1,即围绕圆柱体的 5 倍。为了使您的纹理使用这种技术保持独立,您需要将圆柱体绘制成 5 个块,每次都将其设置GraphicsDevice.Textures[0]为您当前的纹理。

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

于 2011-08-18T12:35:34.377 回答