gpt4 book ai didi

c - 在 opengl 中处理 .off 文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:41 24 4
gpt4 key购买 nike

我有几个 .off 格式的 3D 对象,我想使用 OpenGL + C 对其进行操作。是否有标准、简单的方法来执行此操作?

最佳答案

Based on the link genpfault posted ,您的第一个问题是您使用的是 ASCII 模型格式。虽然可以这样做,但您引入了转换问题。很难,不是真的,有点痛,是的。此外,此格式有二进制和 ASCII 变体,因此您必须处理两种格式。

现在,格式的详细信息,如本节所述(取自页面):

Line 1 OFF

Line 2 vertex_count face_count edge_count

One line for each vertex: x y z
for vertex 0, 1, ..., vertex_count-1 One line for each polygonal face: n v1 v2 ... vn,

the number of vertices, and the vertex indices for each face.

乍一看,这似乎是以一种对 OpenGL 非常友好的格式来定义事物。事实上,我敢打赌您可以直接从模型文件中进行渲染。这只会工作一次,但它意味着与周围的一些更疯狂的格式相比,你有了一个好的开始。

您要做的是使用第二行并找到顶点和面数。存储这个(后面是伪代码片段)。然后遍历顶点和面列表并加载每个列表,以您喜欢的任何形式保存它。这个过程会是这样的:

List<Vector3> vertices;

Open file model.off
Read line
if ( line == "OFF" )
{
// We know it's a model
Read line
Attributes[] = Split line(' ')
Vertex count = Attributes[0]
Face count = Attributes[1]
// Save edge count if necessary
For ( vert = 0; vert < vertex count; vert += 1 )
{
Read line
Coordinates[] = Split line(' ')
float X = FloatFromString(Coordinates[0])
float Y = FloatFromString(Coordinates[1])
float Z = FloatFromString(Coordinates[2])
vertices.push(new Vector3(x, y, z))
}
// Repeat for faces
}

现在,一旦您加载了所有数据,您就需要设置它以进行渲染。你可以在你的模型类中有一个小函数,它只调用:

glBegin(TRIS)
for each ( face )
{
retrieve the verts from the list
glVertex3f(x, y, z)
}

显然这并不准确,但这是粗略的想法。您可以将顶点缓存到卡上的 VBO 或许多其他方法中的任何一种,但在我看来,使用像这样的简单渲染可以简化模型格式和渲染过程之间的联系。

关于c - 在 opengl 中处理 .off 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com