【问题标题】:Importing an ultralarge XNA Model (poly count)导入超大型 XNA 模型(多边形数)
【发布时间】:2014-07-18 01:00:39
【问题描述】:

我目前正在尝试将一个非常大的模型导入 XNA/Monogame,这是一个具有超过 80,000,000 个顶点的钢结构模型。该引擎的编写是为了优化此模型以实现可视化,在 ModelMesh 级别上运行八叉树和视锥体剔除。

我最近了解到模型处理器中的默认 base.Process 操作结合了模型中所有模型网格的顶点和索引缓冲区,根据这篇文章中的答案:

Confusion about model's vertexbuffer and indexbuffer

这带来了一个问题,因为该模型超过了最大 VertexBuffer 大小 67108863。结果,内容处理器甚至不允许我创建 xnb 文件。

理想情况下,我会在内容处理器中将顶点和索引缓冲区拆分为多个较小的缓冲区,但缓冲区本身是在模型处理器的 base.Process 函数中生成的,之后似乎不可编辑。

我可以使用任何机制来拆分 XNA 模型的顶点和索引缓冲区吗?

【问题讨论】:

  • Erm..你为什么需要这么大的模型?
  • 您最好将模型导入 3ds 或 maya 等 3d 建模应用程序并使用自动顶点缩减功能。

标签: c# xna monogame


【解决方案1】:

我最终解决了这个问题。 XNA 模型根本不支持多个顶点和索引缓冲区,因此解决方案是编写一个大型模型自定义内容处理器,它返回一组 ModelContent 对象,而不仅仅是一个。

这可以很容易地像这样调用:

Model[] myModel = Content.Load<Model[]>("myModelFile");

...虽然它需要对我的三角形拾取和绘制例程进行一些更改,但结果证明是一个相对容易实施的解决方案。

【讨论】:

  • 您是如何实现自定义内容处理器以返回一个 ModelContent 数组作为 Process 方法的,实现覆盖,只返回一个 ModelContent。你能解释一下吗?
猜你喜欢
  • 2011-07-13
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2011-04-14
  • 2014-09-05
  • 1970-01-01
  • 2012-02-13
相关资源
最近更新 更多