0

我最近涉足 DirectX 并且一直在使用 Anim8or 进行一些操作,并且发现了几种可以导出模型的基于文本的文件类型。我特别喜欢 VTX 文件。我已经学会了如何从中解析一些基础知识,但我显然遗漏了一些东西。

它以.Facesetwith is 开头(在同一行),后跟文件中的网格数。

对于每个网格,按顺序有一个.Vertex部分和一个.Index部分,第一对.Vertex/.Index部分是第一个网格,第二组是第二个网格,依此类推。

在文件的一个.Vertex部分中,每行有 8 个数字和未定义的行数(除非您想相信 Anim8or 在该部分之前放置的注释,但这似乎不是文件规范的一部分,只是Anim8或善良)。前 3 个数字对应于稍后将用作顶点的特定点的 X、Y 和 Z 坐标,其他 5 个我不知道。大多数时候,最后两个数字都是 0,但我注意到这并不总是正确的,只是通常是正确的。

接下来是匹配.Index部分。本节有 4 个数字。前 3 个是前面提到的顶点的参考编号,3 个点在模型中标记了一个三角形。0 表示第一个提到的顶点,1 表示下一个,依此类推,就像从零开始的数组。第四个数字似乎总是-1,我不知道它有什么重要性,我不能保证它总是-1。如果您无法确定,我对这种文件类型中的任何内容都不太确定。

我现在选择忽略文件中的其他信息,因为我是新手,不想让事情过于复杂。比如每一.Index节之后是:

.Brdf
// Ambient color
0.431 0.431 0.431
// Diffuse color
0.431 0.431 0.431
// Specular color and exponent
1 1 1 2
// Kspecular = 0.5
// end of .Brdf

在我看来,这是关于刚刚描述的网格的表面。但是放置网格不需要它,所以我现在移过了它。

继续讨论真正的问题...当 VTX 文件中只有一个网格(即.FaceSet1)时,我可以加载 VTX 文件。我几乎可以成功加载具有多个网格的 VTX 文件,每个网格都已成功构建,但相对于其他网格没有正确放置。我从论坛中的 Anim8or 线程下载了一个 AT-AT 模型,它由 344 个网格组成,当我仅使用我目前提到的规格加载文件时,看起来 AT-AT 好像爆炸了它是如何制作它的示意图(当在 Anim8or 中加载时,所有部件都很接近,类似于完全组装的 AT-AT)。所有的碎片都正确定向并且具有相同的向上方向,但是碎片之间有很多额外的空间。

有人知道如何正确读取 VTX 文件吗?或者知道一个可以解释其他数字含义的网站?

编辑:

文件扩展名 .VTX 用于许多不同的事情,并且根据预期用途具有许多不同的结构。Valve、Visio、Anim8or 和其他几个使用 VTX,我只对 Anim8or 导出的 VTX 文件及其使用的结构感兴趣。

4

2 回答 2

1

根据一些谷歌搜索,您似乎处于管道的错误一端。据我了解:VTX 文件是Valve 专有文件格式,是一系列步骤的结果。

每个半条命模型的 Studiomdl 的最终输出是 gamedirectory/models 文件夹中可供游戏引擎使用的一组文件:

  • 一个 .MDL 文件,它定义了模型的结构以及动画、边界框、命中框、材质、网格和 LOD 信息,
  • 一个 .VVD 文件,它存储 MDL 使用的骨骼权重、法线、顶点、切线和纹理坐标的位置独立平面数据,目前
  • 三种不同类型的 VTX 文件:

    • .sw.vtx(软件),
    • .dx80.vtx (DirectX 8.0) 和
    • .dx90.vtx (DirectX 9.0) 存储 MDL 中每个网格的每个 LOD 的硬件优化材质、蒙皮和三角形条/扇形信息,
  • 通常是包含刚性或关节(布娃娃)碰撞模型的 .PHY 文件,有时
  • 用于待办事项的 .ANI 文件:与模型动画有关的事情

阀门

现在 Valve Source SDK 可能有一些实用程序来读取 VTX(它似乎有能力制作它们)。有些人可能已经制作了 3rd 方工具或有代码来阅读它们,但它可能不适用于所有文件,只是因为它是 3rd 方格式。我还发现了这篇文章,如果你以前没有看过它可能会有所帮助。

于 2009-12-04T04:29:01.470 回答
1

我自己一直在开发一个 3D 建模程序,并且想要一种简单的格式,以便能够将对象带入编辑器,以便能够使用大量顶点和面来测试我的绘图例程的速度。我一直在寻找一种简单的方法,可以快速获取模型并找到 .vtx 格式。我用谷歌搜索并找到了你的问题。当我无法在互联网上找到该格式时,我尝试并比较了 .OBJ 导出和 .vtx 导出。(也许它只是为 Anim8or 创建的?)这是我发现的:

1)是的,顶点在每行上有八个数字。如您所料,前三个是 x、y 和 z 坐标。接下来的三个是顶点法线,nx、ny 和 nz。您可能会注意到,每个顶点多次出现,并且包含它的每个面具有不同的法线。最后两个数字是纹理坐标。

2)关于面孔,我得出了和你一样的结论。前三个数字是上面顶点列表的索引。最后一个数字似乎总是-1。我将假设它与面部的朝向有关。(例如,朝内或朝外。)由于大多数模型都是在所有面都正确面对的情况下创建的,因此可以合理地认为这对于所有模型来说都是相同的数字。

3) 一个附加说明:当比较 .obj 和 .vtx 时,我确实注意到顶点的位置发生了变化。与 .an8 文件比较时也是如此。只要它们在每个顶点和每个文件中都偏移相同的量,这不应该是一个“巨大的”问题。至少那时它可以得到补偿。

您是否考虑过使用 .obj 文件格式?它是基于文本的,解析或理解并不是非常困难。网上有很多关于它的信息。

我要补充一点,经过几个小时的检查,Anim8or 中的 vtx 导出似乎被破坏了。我遇到了和你一样的问题,就是这些部件的位置不正确。我的假设是 anim8or 使用每个网格的本地坐标导出这些对象,而不考虑已应用的转换。我还注意到它不会导入 vtx 文件...

于 2009-12-29T03:15:48.887 回答