通过查找重复的顶点从 vec3 对象的向量中计算索引
Calculate indices from a vector of vec3 objects by finding duplicate vertices
我正在尝试构建一个 .obj 文件导入器,将所述模型呈现到屏幕上。
目前我已经导入了顶点并将它们存储在
std::vector<vec3> vertices;
我的渲染器 class 相当大所以我会 link github 而不是在这里发布它。
所以在 renderer.cpp 的第 41 行。我将这些顶点提交给渲染器。本来我只是画三角形,但我想利用GL_ELEMENTS
我的问题是如何(如果可能)从顶点列表中计算这些索引?我试图找到重复项并在加载模型时这样做,但我不知道如何映射它们。
使用映射缓冲区(glMapBuffer
)在您的情况下不起作用。
例如,如果您想知道一个顶点是否已经被映射(重复),您应该读取所有当前映射的顶点,这很慢。
如果您想使用排序数组(因此可以使用快速二分查找),那么在 sorting/storing 过程中必须重写映射缓冲区的许多部分。也慢
更好的选择是在普通 RAM 上自行构建排序的顶点数组。建议在比较两个浮点数时搜索由于数字问题引起的问题。
在第二遍中,每个索引只是当前顶点的位置。对于数值问题的相同建议。
数据可以通过两个简单的 glBufferSubData
发送到 GPU,一个用于顶点(及其颜色和法线等),另一个用于索引。
如果对象移动(并且您更喜欢更新坐标而不是使用平移矩阵),那么使用具有新坐标的映射缓冲区是正确的(就像您目前所做的那样)。索引不会改变,因此不需要更新。
我正在尝试构建一个 .obj 文件导入器,将所述模型呈现到屏幕上。 目前我已经导入了顶点并将它们存储在
std::vector<vec3> vertices;
我的渲染器 class 相当大所以我会 link github 而不是在这里发布它。
所以在 renderer.cpp 的第 41 行。我将这些顶点提交给渲染器。本来我只是画三角形,但我想利用GL_ELEMENTS
我的问题是如何(如果可能)从顶点列表中计算这些索引?我试图找到重复项并在加载模型时这样做,但我不知道如何映射它们。
使用映射缓冲区(glMapBuffer
)在您的情况下不起作用。
例如,如果您想知道一个顶点是否已经被映射(重复),您应该读取所有当前映射的顶点,这很慢。
如果您想使用排序数组(因此可以使用快速二分查找),那么在 sorting/storing 过程中必须重写映射缓冲区的许多部分。也慢
更好的选择是在普通 RAM 上自行构建排序的顶点数组。建议在比较两个浮点数时搜索由于数字问题引起的问题。
在第二遍中,每个索引只是当前顶点的位置。对于数值问题的相同建议。
数据可以通过两个简单的 glBufferSubData
发送到 GPU,一个用于顶点(及其颜色和法线等),另一个用于索引。
如果对象移动(并且您更喜欢更新坐标而不是使用平移矩阵),那么使用具有新坐标的映射缓冲区是正确的(就像您目前所做的那样)。索引不会改变,因此不需要更新。