当前位置: 首页 > 面试题库 >

将OBJ文件中的四面体转换为三角形?

司空朝
2023-03-14
问题内容

乍一看,似乎很明显……只要找到4个索引,就在每个面上制作2个三角形,对吗?
含义如下:

v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2 -1

进而需要将…转换为以下内容:

v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2
f -2 -3 -1

当然,此特定示例将正确呈现。
但是,并非所有情况都像将面分为两个面一样简单(根据上述示例,第一个面包含原始面的前三个顶点,第二个面包含最后3个顶点)。以以下多维数据集为例:

v 0.000000 1.000000 1.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 1.000000 0.000000
f 1 2 3 4
f 8 7 6 5
f 4 3 7 8
f 5 1 4 8
f 5 6 2 1
f 2 6 7 3

这些面不能以前面的示例相同的方式进行分割…因此,我需要某种方式来了解如何将四边形面分割为两个三角形面,同时为第二张面使用 正确的 索引…

如何做到这一点? 请注意,我没有使用固定功能管道,因此,不能选择使用GL_QUADS。我的渲染引擎几乎只能使用GL_TRIANGLES。


问题答案:

如果您有4个索引,例如:

0 1 2 3

分成两个三角形将是第一个带有三个索引,一个带有第三个,第三个和第四个索引。在此示例中:

0 1 2
0 2 3

让我们尝试一些ASCII艺术来说明这一点:

3-------2
|      /|
|    /  |
|  /    |
|/      |
0-------1

在这里,您将看到0 1 2 3四边形,0 1 2第一个三角形(右下)和0 2 3第二个三角形(左上)。

更一般而言,对于具有n顶点的面,将生成三角形:

0 (i) (i + 1)  [for i in 1..(n - 2)]

如果您不坚持使用单独的三角形,则还可以使用GL_TRIANGLE_FAN仍在核心OpenGL中的图元。这样,您可以使用原始索引序列使用三角扇绘制任何凸多边形。因此,0 1 2 3在这种情况下,具有顶点序列的三角形扇形结构描述了四边形,并且很容易将其推广到具有4个以上顶点的面。

编辑:由于您似乎仍然有问题,让我们看看这如何应用于您帖子中的示例。我将列出每个面的四边形的原始索引序列,以及拆分四边形后的两个三角形的索引序列。

f 1 2 3 4 --> (1 2 3) (1 3 4)
f 8 7 6 5 --> (8 7 6) (8 6 5)
f 4 3 7 8 --> (4 3 7) (4 7 8)
f 5 1 4 8 --> (5 1 4) (5 4 8)
f 5 6 2 1 --> (5 6 2) (5 2 1)
f 2 6 7 3 --> (2 6 7) (2 7 3)

当我绘制立方体时,这对我来说似乎是正确的。请记住从索引中减去1,因为它们是从1开始的索引,并且几乎可以肯定需要从0开始的索引。



 类似资料:
  • 问题内容: 嗨,我正在尝试创建仿射变换,使我可以将一个三角形变换为另一个三角形。我所拥有的是2个三角形的坐标。你能帮助我吗? 按照亚当·罗森菲尔德的回答,我想出了这段代码,以防万一有人无聊地自己解决方程: 问题答案: 我假设您在这里谈论2D。仿射变换矩阵中有9个值: 有3个顶点输入,和,当其转化应该成为,,。然而,由于我们在齐次坐标的工作,应用到不一定给-它给人的倍数。所以,我们也有未知的乘法器,

  • 我有一本书。obj。具有多个材质的mtl文件对于指定的材质,我要打印顶点及其对应的uv坐标。有没有一种方法可以解析一个。obj,和。mtl文件并将其导出为json?使用时 波前obj分析器 Py波前 meshlab所有这些工具都会生成一个json文件,我认为数据是部分的——我没有看到其中的材料 编辑: 我用一个示例3D模型进行了测试 第1步:转换文件。obj和。mtl将多个材质合并为一个。json

  • 问题内容: 有什么方法可以将File对象转换为MultiPartFile?这样我就可以将该对象发送到接受接口对象的方法? 问题答案: 存在MockMultipartFile为此目的。如你的代码段中所示,如果文件路径已知,则以下代码对我有用。

  • 问题内容: 我使用APKTool对Android应用程序进行了反向工程,并获得了.Smali文件作为源代码输出。我将带有应用程序的.Smali文件转换为.Java文件。我能够成功编辑.Java文件,但现在我想将它们转换回.Smali,以便可以使用新的.Smali文件重新编译应用程序。当我只留下.Java文件时,它不会重新编译并给出一些错误。我在互联网上找不到有关将.Java编译为.Smali的任何

  • 问题内容: 有人知道有什么好的库可以将平面文件转换为Java对象吗?我发现了扁虫,但我正在寻找替代品。 问题答案: FFP-平面文件解析库 http://jffp.sourceforge.net/

  • 问题内容: 按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要从现有的(X)HTML文档自动生成PDF文件。输入文件(报告)使用非常简单的基于表的布局,因此可能不需要支持真正精美的JavaScript / CSS。