波前 OBJ 文件可以具有每个对象(或每个组)的顶点吗?

Posted

技术标签:

【中文标题】波前 OBJ 文件可以具有每个对象(或每个组)的顶点吗?【英文标题】:Can wavefront OBJ files have per-object (or per-group) vertices? 【发布时间】:2020-06-08 14:26:08 【问题描述】:

我有一个物体被分成许多小部分。我可以维护一个全局顶点列表并找出属于每个小部分的顶点,但如果我可以相对索引,在我的用例中会更容易。

IE,我指定part 0有8个顶点,part 0的face 0使用那个part的顶点0、3、4

有没有办法在 Wavefront OBJ 文件中执行此操作?组和对象的工作原理有点不清楚。

例如,以下是否合法?

o myObj1
v 3159.000000 203.000000 1959.000000 1.000000
v 3161.000000 203.000000 1959.000000 1.000000
v 3161.000000 203.000000 1961.000000 1.000000
v 3159.000000 203.000000 1961.000000 1.000000
v 3159.000000 205.000000 1959.000000 1.000000
v 3161.000000 205.000000 1959.000000 1.000000
v 3161.000000 205.000000 1961.000000 1.000000
v 3159.000000 205.000000 1961.000000 1.000000
f 1 4 5
f 4 5 8
f 2 3 6
f 3 6 7
f 1 2 3
f 1 3 4
f 5 6 7
f 5 7 8
f 1 2 5
f 2 5 6
f 4 3 8
f 3 8 7
o myObj2
v 3159.000000 203.000000 1961.000000 1.000000
v 3161.000000 203.000000 1961.000000 1.000000
v 3161.000000 203.000000 1963.000000 1.000000
v 3159.000000 203.000000 1963.000000 1.000000
v 3159.000000 205.000000 1961.000000 1.000000
v 3161.000000 205.000000 1961.000000 1.000000
v 3161.000000 205.000000 1963.000000 1.000000
v 3159.000000 205.000000 1963.000000 1.000000
f 1 4 5
f 4 5 8
f 2 3 6
f 3 6 7
f 1 2 3
f 1 3 4
f 5 6 7
f 5 7 8
f 1 2 5
f 2 5 6
f 4 3 8
f 3 8 7

等等。 (当然假设坐标就是坐标)

编辑:***状态:

OBJ 文件,由于它们的列表结构,能够通过它们的绝对位置来引用顶点、法线等(1 代表第一个定义的顶点,N 代表第 N 个定义的顶点),或通过它们的相对位置(-1 表示最新定义的顶点)。但是,并不是所有的软件都支持后一种方式,相反,有些软件天生就只写后一种形式(由于方便追加元素而无需重新计算顶点偏移等),导致偶尔出现不兼容。

所以这...应该有效吗?然而,目前还不清楚格式会是什么样子。在任何情况下,它都无法在 3D Viewer 中正常工作。

【问题讨论】:

【参考方案1】:

聚会有点晚了:)

您可以使用***引用中所述的相对顶点位置;它访问latest(不是last)定义的顶点。如果你用这个替换两个人脸列表:

f -8 -5 -4
f -5 -4 -1
f -7 -6 -3
f -6 -3 -2
f -8 -7 -6
f -8 -6 -5
f -4 -3 -2
f -4 -2 -1
f -8 -7 -4
f -7 -4 -3
f -5 -6 -1
f -6 -1 -2

它在 3D 查看器中显示两个立方体。因此,即使 OBJ 没有将它们与对象或组关联,它们也可以“本地”访问。

您还可以选择将每个对象的顶点反向写入,因此第一个顶点(最后写入)可以称为 -1,第二个称为 -2,依此类推。

【讨论】:

【参考方案2】:

顶点编号在单个 OBJ 文件中是连续的,无论使用何种分组。这意味着正顶点编号是绝对的而不是相对的,负顶点编号是相对于最后定义的顶点(但仍包括所有定义的顶点)。

即。顶点定义没有分组。

点(“p”标签)可以(可能?)进行分组,但要呈现为实际点,而不是面部的一部分。

tl;dr 最接近你所尝试的是负索引,但它是否正确加载取决于加载它的程序

【讨论】:

以上是关于波前 OBJ 文件可以具有每个对象(或每个组)的顶点吗?的主要内容,如果未能解决你的问题,请参考以下文章

解析波前 obj 文件格式

波前 obj 模型加载器索引问题

从边列表计算创建的图数和每个图中的顶点数

csv转换obj

ALU 如何在 AMD GPU (VLIW) 中执行指令?

基于创建年份将对象的数组拆分为子数组