C++ OpenGL3.1和x2B的分层COLLADA加载程序;上下文

C++ OpenGL3.1和x2B的分层COLLADA加载程序;上下文,c++,opengl,3d,collada,C++,Opengl,3d,Collada,哪些层有助于有效地实现这一点?最好是这样,我能够将下面列出的这三个组件与早期的层结合起来,并在运行时对其余部分进行编码 我正在编写一个COLLADA加载库,用于我的图形引擎。当然,我一开始就注意到这似乎是一个相当大的任务。我现在打算编写使用不同层的库 我还不明白科拉达的意思。我假设可能有: 几何层 着色器层 织物层 即使是我不确定的这些,也可能需要成为另一种分层方案的一部分 请注意,除非另有说明,否则我很可能会使用或我刚读到的这个来读取文件。您知道Open Asset Import Libr

哪些层有助于有效地实现这一点?最好是这样,我能够将下面列出的这三个组件与早期的层结合起来,并在运行时对其余部分进行编码

我正在编写一个COLLADA加载库,用于我的图形引擎。当然,我一开始就注意到这似乎是一个相当大的任务。我现在打算编写使用不同层的库

我还不明白科拉达的意思。我假设可能有:

  • 几何层
  • 着色器层
  • 织物层
即使是我不确定的这些,也可能需要成为另一种分层方案的一部分

请注意,除非另有说明,否则我很可能会使用或我刚读到的这个来读取文件。

您知道Open Asset Import Library()吗?它对Collada加载和图形引擎中使用的目标有相当不错的支持。自己编写collada加载器不仅很难,而且要花很长时间才能使其足够稳定以供生产使用,这主要是因为格式非常复杂(或者,正如Asimp的collada加载器的主要作者开玩笑地说:几乎图灵完成了),而且每个出口商都有自己奇怪的习惯

如果您需要其他功能,您可以将您的工作基于Assimp的Collada loader,并添加您所需的内容(BSD许可证,只要您对源代码进行了属性化,您就可以使用它)

注意:我与该项目有关联,因此并非没有偏见。但是在我们写自己的Collada加载器的可怕经历之后,我只想警告你

请注意,我很可能会使用irrXML


我们也使用它如果你真的要从头开始,不要。使用DOM解析器,例如TinyXML。Collada很复杂,但定义很好,SAX解析器只是加强了工作,因为您必须自己构建文档树(并且您*将**需要一个数据结构来类似于完整的文档-Collada元素是高度互连的。要从中读取有意义的内容,需要解决各种交叉引用).

您能为OpenAsset loader与支持全部功能的渲染引擎的接口提供合适的层吗?我听说过这个库,但总是担心我不知道的开销和多线程/流式处理的困难。如果您对此有任何意见,我将不胜感激。将Assimp的输出数据转换为您喜欢的任何表示形式将很容易,无论是OpenCl、OpenGl还是其他。如果它缺乏对您需要支持的某个Collada特性的支持,则需要修改加载程序代码。正如我提到的,您可以简单地将您的工作建立在它的基础上,并将其归属于源代码,这在法律上是可以接受的。关于开销:像Collada文件一样读取复杂的XML文件是开销。ASIMP是开销(内存消耗、图像大小和处理速度方面)。如果你的应用程序开销太大,考虑[Snip ]将导入部分从主应用程序中删除:加载你的CelaDa文件一次(不管你怎么做),将它们转换成你想要的表示,保存到磁盘,让你的应用程序加载这个优化的BLB。(具有一组可选数据流的原始顶点)、网格邻接(场景图、变换层次)、动画通道和材质(它们只是一个键值存储,大致表示从原始文件读取的内容)这些不同的通道或多或少独立,当然它们互相引用,并且不用担心<代码> NoBoooSo/Cord>。如果使用C++接口并创建和使用每个线程的一个导入实例,它将是很好的。没有线程问题。(我不确定文档中是否明确说明了这一点,但请放心,它不会在未来的版本中更改)。