问题标签 [content-pipeline]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
84 浏览

xna - 具有浏览功能的自定义 ContentPipeline

我正在编写一个自定义 ContentPipeline,并添加了一些法线和高光贴图属性。一切都可以正常编译并按预期工作。我现在想做的是在用户单击框时让 Normal 和 Specular 属性“可浏览”。目前,用户必须输入他们的普通或镜面文件的名称,我想要的是 Font 属性。当用户单击 Font 属性时,它会出现带有 3 .s 的框。

我将如何获得此功能?是否可以?

0 投票
1 回答
2738 浏览

c# - Xna Content Pipeline Extension - 在自定义处理器中加载其他内容

我目前正在试验 Xna 内容管道扩展。在该实验中,我正在尝试加载一个包含另一个需要加载的“内容项”的文件。例如:

现在,在我的内容处理器中,我可以创建一个新的“CustomItem”实例并初始化 Name 字段,因为它只是一个字符串。但是,我无法在内容编译期间加载纹理文件(注意:纹理只是一个示例,理想情况下我希望能够加载任何其他内容类型)。

我正在寻找的是这样的:

有谁知道这是否真的可行,如果可以,该怎么做?如果可能的话,我宁愿不走延迟加载其他内容项的路线,或者使用二进制读取器和写入器创建我自己的自定义内容加载。

0 投票
2 回答
666 浏览

xna - xna 发布的项目没有内容管道?

我正在做一个个人项目,用于 XNA 的学习目的。我在网上读到使用内容管道需要人们安装 xna 运行时。所以我决定使用Texture2D.FromStream加载文件。

当我从 Visual c# 运行项目时一切都很好,但是当我发布项目并运行它时,它立即崩溃了。我不确定是否有办法查看有关崩溃的更多信息,但我认为没有。我认为这取决于不使用内容管道。

当我查看已发布项目的应用程序文件时,我只看到 .xnb 文件。并且没有我正在使用的原始 .png 和 .xml 文件。

我试图手动将文件放在那里,但这也不起作用。这些文件都在“Projectname\bin\x86\Debug\Content”文件夹中。

有人有什么想法吗?


编辑

我刚刚重写了我的内容管理器,因此它使用了内容管道,并且发布的项目现在可以在我的电脑上正常运行。所以我必须想办法让它在没有内容管道的情况下工作

0 投票
1 回答
927 浏览

c# - XNA 中的实时资源更新

我正在寻找一种在 XNA 运行时更新纹理和其他内容文件的方法,这样如果在应用程序之外对其进行了修改,它会在重新获得焦点时在游戏中自动更新。

这似乎可以使用 Texture2D 并从 Stream 加载,但我无法获得到给定资源的直接路径。

我意识到这不适用于内容管道和 .xnb,但出于调试和开发目的,它将非常有用。

有没有人看到这样的东西用 XNA 成功实现了?

0 投票
1 回答
1691 浏览

c# - XNA 中的自定义内容管道,如何手动设置漫反射纹理?

XNA 是蜜蜂的膝盖,但我仍然无法完全围绕自定义内容管道。

一些基本示例(如 MSDN 的法线贴图示例)向您展示了如何将 .fbx 文件中的不透明数据中的法线贴图键分配给要加载的适当法线贴图纹理。我什至不知道他们是如何知道密钥应该命名的,实际上是什么不透明数据,是否在 .fbx 文件中定义。

有趣的是,内容管道中没有代码说明如何设置漫反射纹理——这似乎暗示您使用了一个名为“Texture”的阴影参数,它们会自动设置。但是,如果我将参数重命名为其他名称,则模型加载时没有纹理。

它如何隐式知道加载漫反射纹理,例如,我如何加载漫反射纹理以使用不同命名的着色器参数读取并加载默认的中性白色纹理文件(如果不存在)?

就此而言,是否有学习使用内容管道自定义加载模型的“hello world”示例?

请注意,我不希望通过在属性窗口中设置纹理来覆盖 .fbx 模型中的现有纹理引用。

0 投票
4 回答
560 浏览

.net - 从 XNA 中的 ContentManager 获取内容类型

我正在为 XNA 游戏构建内容编辑器,并且已经准备好内容阅读器和编写器。在我的编辑器中,我将遍历文件夹中的所有文件以在我的编辑器窗口中显示对象列表。我已经设置好了东西,但是在获取我的内容文件夹的文件列表后,我一直坚持要做的事情。

所有文件都有 XNB 扩展名,读取它们的唯一(非 hacky)方法是使用 XNA 内容阅读器。但是我想提前知道文件的内容类型(是地图还是游戏对象模板,还是我定义的许多其他类型的任何东西),而不是一个一个地加载它们并尝试加载每个对于每种可能的内容类型,这实际上是不可能的(或者说,有史以来最糟糕的编程实践)。

我怎样才能得到这样的功能:

ContentManager.ContentTypeOf(string assetPath);它返回一个类型,所以我可以提前知道在哪里加载(而不是加载)什么。仅仅为了编辑单个对象模板而加载游戏的所有地图并不是一个好主意。必须有一种实用的方法来区分内容文件的类型。

0 投票
1 回答
1373 浏览

c# - 从 XML 文件中构建内容的引用加载纹理

目标

我正在尝试使用默认导入器(XML 内容)加载包含Texture2D来自 xml 文件的自定义类,没有处理器。


方法

大量在线研究和大量处理其他错误导致我找到了这个 XML:

是的,我也不喜欢硬编码的路径,但是如果我可以在没有自定义读取器和/或包含每个类型的写入器的情况下Texture2D使用它,我可以忍受它。

以下是我的课程内容版本(由管道使用):

以下是我的运行时版本:


问题

如果我尝试做var test = Content.Load<EntityTemplate>("BulletTemplate");以下是我得到的错误:

加载“项目符号”时出错。ContentTypeReader Microsoft.Xna.Framework.Content.Texture2DReader, Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553 与现有处理程序 Microsoft.Xna.Framework.Content.ReflectiveReader`1[[Microsoft .Xna.Framework.Graphics.Texture2D,Microsoft.Xna.Framework.Graphics,版本=4.0.0.0,文化=中性,PublicKeyToken=842cf8be1de50553]],Microsoft.Xna.Framework,版本=4.0.0.0,文化=中性,PublicKeyToken =842cf8be1de50553 用于 Microsoft.Xna.Framework.Graphics.Texture2D 类型。

看起来运行时阅读器找到了 2 个用于处理Texture2D资产的阅读器,ReflectiveReader<Texture2D>阅读器和Texture2DReader.


问题

我该如何解决这个问题,所以我最终得到了一个正确填充的对象,Texture2D属性引用了加载的纹理?

注意:我不想添加另一个字符串属性并在我的对象上创建一个名为LoadContent或其他东西的方法。我想Content.Load成为我唯一需要打电话的人。

我还想避免为每种包含Texture2D属性的类型编写自己的阅读器/作者。

理想情况下,我想避免为 Texture2D 或子类创建包装类,但如果没有其他选择,那么我很高兴有一个解决方案可以做到这一点。

0 投票
2 回答
1273 浏览

c# - 在 C# 表单中使用 XNA 内容管道

我正在尝试使用 C# 表单创建游戏编辑器,但在反序列化时遇到了问题;我无法在表单应用程序中使用内容管道,因为我什至没有向项目添加任何内容引用的选项。如何将内容管道与我的表单应用程序一起使用?还有其他方法可以加载和反序列化我的 XML 内容吗?

0 投票
1 回答
2573 浏览

c# - 在 XNA 中以编程方式序列化 Texture2D

我正在为我正在构建的 XNA 游戏构建一个游戏编辑器,该游戏将接受 JPEG/PNG,并输出一个包含 Texture2D 内容的 XNB 文件。

我有用于我的自定义等的自定义序列化程序,我正在挖掘所有内容以使用反射等调用 ContentCompiler,进入真正的脏位,我实际上可以让这部分为我自己的格式工作。但是我现在需要序列化为 XNA 知道如何编译的常规 Texture2D 格式(在构建项目时在 Visual Studio 中)和加载(在游戏中使用最常用的 Content.Load 方法。我不想制作自己的图像这显然是文件格式。当我尝试编译 Texture2D 时,它不会给我一个错误,它会创建 XNB 文件,但文件内容不是图像数据,它只是大约 3-4 KB 的开销(我认为是 Texture2D 对象的其他非图像属性)。

这是我用于编译的代码:

我有自己的内容处理器,这段代码可以完美地与它们配合使用。这只是调用 ContentCompiler 的 Compile 方法,但使用了反射(因为它是一个内部类)。

我不明白为什么 Texture2D 会序列化,但没有实际的位图数据。

编辑 对不起,它不编译Texture2D(它抱怨我的GraphicsDevice的循环引用),如果我尝试编译一个Bitmap对象,它编译没有错误但不序列化实际的位图数据)

0 投票
2 回答
1044 浏览

c# - Xna 内容管道和纹理

我试图了解内容处理器和纹理,但我有点困惑......我有两个场景:

  • 一个是包含纹理的模型,导入器加载xml并将纹理文件名传递给处理器,但我只能得到一个TextureContent,这似乎是对纹理的编译时引用,但这对我没有帮助填充我模型的 Texture2D 位。

  • 第二种情况是我想搭载纹理处理器从纹理文件创建一个精灵图对象,精灵图基本上是一个包含纹理和精灵宽度/高度的模型。

一直让我难过的是这些 ExternalReference 和 TextureContent,作为模型,让我们说:

然后我有一个像这样的内容处理器:

现在它抱怨处理器被赋予了TextureContent,但这不是纹理......但是由于某种原因,TextureContent在通过contentManager加载时似乎神奇地变成了纹理......所以我有点困惑至于我如何在这种情况下获得纹理。由于这两种情况都非常相似,我确信如果我解决了一个问题,我会同时解决它们,但理想情况下我希望能够:

如果有人能解释如何使这个看似神奇的过程发挥作用,我会给你很多赞誉!