通过查找重复顶点从 vec3 对象的向量计算索引



我正在尝试构建一个 .obj 文件导入器,将所述模型呈现到屏幕上。 目前我已经导入了顶点,它们存储在

std::vector<vec3> vertices;

我的渲染器类很大,所以我将链接 github 而不是在这里发布它。

https://github.com/rob-DEV/OpenGL-Model-Viewer/blob/master/OpenGL-Model-Viewer/src/graphics/renderer/renderer.cpp

所以在渲染器.cpp的第 41 行。我将这些顶点提交给渲染器。最初我只是画三角形,但我想利用GL_ELEMENTS

我的问题是(如果可能的话)如何从顶点列表中计算这些指数?我试图找到重复项并在加载模型时这样做,但我不知道如何映射它们。

使用映射缓冲区(按glMapBuffer)在您的情况下不起作用。

例如,如果您想知道顶点是否已映射(重复),则应读取所有当前映射的顶点,这很慢。
如果要使用排序数组(因此可以使用快速二叉搜索),则必须在排序/存储过程中重写该映射缓冲区的许多部分。也慢。

更好的选择是在普通 RAM 上自行构建排序的顶点数组。在比较两个浮点数时,应注意由于数字问题而引起的搜索问题。

在第二次传递时,每个索引只是当前顶点的位置。对数字问题的相同建议。

数据可以通过两个简单的glBufferSubData发送到GPU,一个用于顶点(及其颜色和法线等),另一个用于索引。

如果对象移动(并且您更喜欢更新坐标而不是使用平移矩阵),那么使用具有新坐标的映射缓冲区是正确的(就像您目前所做的那样)。索引不会更改,因此不需要更新。

最新更新