将纹理文件包含到 collada 文件中

Posted

技术标签:

【中文标题】将纹理文件包含到 collada 文件中【英文标题】:Including texture files into the collada file 【发布时间】:2012-08-26 17:52:44 【问题描述】:

我想将我的纹理图像文件包含到我的 collada 文件中。 现在我有很多文件:.dae 本身和 .png 纹理文件。

但是我只想要一个文件:.dae,但其中包含纹理。

我可以以某种方式将 .png 图像存储在 .dae 文件本身中吗? 可能吗? 提前谢谢!

【问题讨论】:

【参考方案1】:

尽管前面的答案说了什么,但完全可以在 COLLADA 文件本身中嵌入图像。在<init_from> 元素下,您会发现您可以使用<ref> 元素指定文件名,或者,您可以指定<hex format="PNG">,在该<hex format="PNG"> 下,您可以将图像数据指定为十六进制编码的二进制八位位组序列.但是,由于是十六进制编码,这比将图像文件包含在 .zae 存档(实际上是具有不同扩展名和特殊元数据文件的 .zip 文件)中的存储效率要低一些。

我知道这个问题已经有几个月了,但我必须更正上一个答案。

【讨论】:

感谢您的评论。这很有帮助。 请注意, 元素适用于 Collada 1.5。如果您使用的是 Collada 1.4,则它是一个 元素。规格(和架构)可在 khronos.org/collada 获得 谢谢,这帮助很大。对于其他任何人,请参阅此处文档的第 315 页:khronos.org/files/collada_spec_1_5.pdf【参考方案2】:

您不能在 .dae 文件中嵌入图像。这样做的方法是将它们放在一个 zip 文件中。 COLLADA 文件中纹理的路径应该相对于存档中 .dae 文件的位置。

zip 文件有时会使用扩展名 .zae 重命名。 COLLADA 1.5 spec 在第 20 页正式定义了这些,在此重复以完成:

存档包装

在导入和导出时,DCC 工具必须支持 .zae 格式,这是一个或多个 .dae 文件的 zip 存档 (COLLADA 文档)和所有引用的内容(纹理)。这 存档必须包含一个名为 manifest.xml 的文件,一个 XML 编码的文件 包含<dae_root> 元素。此元素是 UTF8 指向 .dae 文件的相对 URI 的编码。如果 URI 包含一个片段,然后指示的元素是起点 用于加载 .zae 档案的应用程序。否则,该 <scene> 元素将是应用程序加载的起点 .zae 档案。如果这两个条件都不满足,那么 行为未定义。

.zae 文件中的 URI 可以引用存档中的任何其他文件 使用存档根目录的相对路径,根据 URI 标准。

档案本身可能包括其他档案(zip、rar、kmz、zae)。 引用嵌套存档中文档的 URI,本身 在 .zae 存档中,将使用嵌套存档的名称 路径。

例如:

./internal_archive.zip/directory/document.dae#element 

无法使用 相对 URI,但使用绝对值引用内容是有效的 URI,如:

file:///other_directory/other_document.dae#element

【讨论】:

感谢您的详细解答!这真的很有帮助!

以上是关于将纹理文件包含到 collada 文件中的主要内容,如果未能解决你的问题,请参考以下文章

Three.js - 从文件输入加载 Collada 文件(和纹理)

导入到 XCode 的 Collada (.dae) 文件显示没有纹理

如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?

iPhone OpenGL ES 2.0 奇怪的图案在 COLLADA 文件中的球体上渲染纹理

场景工具包中未出现 COLLADA 纹理

C++ OpenGL 错误的 Collada 纹理坐标