Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XNA4中使用多个纹理对圆柱体进行纹理处理?_Xna_Xna 4.0_Texturing_Cylindrical - Fatal编程技术网

如何在XNA4中使用多个纹理对圆柱体进行纹理处理?

如何在XNA4中使用多个纹理对圆柱体进行纹理处理?,xna,xna-4.0,texturing,cylindrical,Xna,Xna 4.0,Texturing,Cylindrical,基本上,我试图覆盖一个老虎机卷轴(白色圆柱模型),其外部有多个均匀分布的纹理。该程序将仅限于Windows,并且纹理将在运行时动态加载,而不是使用内容管道。(Microsoft示例中使用XNA的基于Windows的多屏幕设置) 我能在网上找到的大多数例子都是针对XNA3的,在这一点上,我似乎仍在胡言乱语 因此,我正在寻找有人能提供的关于游戏中物体纹理的任何帮助,比如具有多种纹理的圆柱体 也许有一本好书可以恰当地描述XNA中纹理的工作原理(特别是4.0) 谢谢您有一些选择。这取决于两件事:模型是在

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

我能在网上找到的大多数例子都是针对XNA3的,在这一点上,我似乎仍在胡言乱语

因此,我正在寻找有人能提供的关于游戏中物体纹理的任何帮助,比如具有多种纹理的圆柱体

也许有一本好书可以恰当地描述XNA中纹理的工作原理(特别是4.0)


谢谢

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

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

如果无法修改模型,则必须生成它。AppHub站点上有一个这样的示例:。它可能不会生成纹理坐标,因此需要添加它们。如果希望每个圆柱体有5个图像,则应确保分段数为5的倍数,并且V坐标应在环绕圆柱体时从0变为1.5倍。要使用此技术保持纹理的个性化,您需要将圆柱体分成5块,每次将
GraphicsDevice.textures[0]
设置为当前纹理


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

你可能应该澄清你的问题:你是在问对一个模型应用多个纹理吗?(有趣、棘手的问题)。或者您也在询问如何从文件而不是内容管道加载纹理?(很简单,最好单独问,或者只是阅读文档)。我想问的是在运行时将11个单独的纹理应用于单个圆柱体模型。这里的困难要求是,老虎机卷轴上需要不同的符号,这取决于用户在执行老虎机程序之前是否在实用程序中更改符号。我想我已经开始加载纹理了,但我不知道它是否能正常工作,直到我能弄清楚纹理…我现在的工作方式是通过内容管道以标准方式加载模型。我曾考虑编写一个程序来生成纹理包裹,但我希望避免额外的工作。每个卷轴上有11个符号。通过动态加载纹理,我的意思是当老虎机窗口启动时,它将加载11个符号,只有当用户决定要新的符号时,才会有所不同。符号的更改不会发生在运行时,而是在实用程序运行程序之前。您将卷筒模型拆分为单独的网格的想法听起来不错。我将研究如何做到这一点。现在我正在使用GoogleSketchUp创建简单的模型。你需要以某种方式获得纹理坐标,我不确定Sketchup是否能提供你需要的控制。这可能是可以做到的,但我不会有雾。这可能会有帮助。尝试将纹理坐标应用于通过内容管道加载的模型要比自己构建圆柱体困难得多。诚然,如果SketchUp让你头疼,我会从Primitives 3D链接开始,并在其中添加纹理。再想一想,如果你能让SketchUp应用11种不同的纹理,它应该输出11种不同的材质,然后你可以按照我最初的建议进行。我感谢你的帮助。如果您认为这是更好的方法,我将首先查看在代码中构建原语的XNA示例。