我如何从wavefront .obj文件中获得索引顶点位置和索引顶点法线到OpenGL顶点着色器

How do I get indexed vertex positions AND indexed vertex normals from wavefront .obj file into an OpenGL vertex shader?

本文关键字:顶点 索引 OpenGL 位置 obj wavefront 文件      更新时间:2023-10-16

我试图在顶点数组对象(VAO)中使用两个顶点缓冲对象(VBO)和两个索引缓冲对象(IBO)来渲染包含3D模型的波前。obj文件的数据。.obj文件使用顶点/法线面定义:

f v1//vn1 v2//vn2 v3//vn3

我意识到我不能使用两个ibo来索引OpenGL的VAO,因为只有一个缓冲区对象(一次)可以绑定到GL_ELEMENT_ARRAY_BUFFER绑定目标。这意味着我不能只定义顶点位置索引和顶点法线索引,这是一个问题,当我需要输入到GLSL顶点着色器。

我想使用一个"顶点"结构封装顶点位置和顶点法线,但我不知道如何饲料OpenGL的数据,但一个长数组,当我有我所有的顶点位置数据在不同的对象。我想我可以使用一些循环将数据复制到包含所有位置数据的新数组中。

加载。obj文件时,我想我可以处理数据,以便法线与相应的顶点位置值匹配。

我该如何着手解决这个问题?

我正在使用c++和Visual Studio 2012与OpenGL 3.3。

你必须明白的一件事是,"顶点"不是"位置"的同义词。顶点是属性的集合;位置、法线、纹理坐标等。OpenGL每次处理一个几何元素,其中一个元素由1(点),2(线)或3个顶点(三角形)组成。你不能把位置和正常分开处理,它们必须一起处理。

在你可以在OpenGL中处理它之前,你必须展开。obj文件中的数据。

对于每个唯一的属性元组,引入一个带有新索引的新顶点,并用OpenGL要求的索引顶点替换。obj中的索引属性。