有效地合并交错索引数据

时间:2014-08-09 10:20:09

标签: java opengl collada

this问题一样,我已经从索引交错的格式(COLLADA)加载了一些顶点和索引数据。答案建议使用缓冲区纹理,但也警告渲染性能的损失,我想避免 所以问题是将所有交错索引和顶点数据合并为多个VBOs和一个索引缓冲区 数据如下所示

P N P N P N P N P N P N ...
0 0 1 0 2 0 7 1 6 1 5 1 ...

每个P引用一个位置,每个N指向一个法线向量。

解决此问题的一种方法是跟踪列表中的所有元组(在这种情况下为两个)。如果我读下一个元组,我在列表中搜索这个元组,如果它存在,那么我使用这个位置作为新的索引数据,如果它没有构造一个新的顶点并将元组放在列表中。
当然这很慢,因为它包括将这些元组与每个现有元组进行比较。

是否有更有效的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

所以真正缓慢的部分是在列表中搜索 - 所以不要这样做。使用哈希表会在这种情况下大大加快速度 - 我实际上实现了类似的东西,并且它确实工作得很好 - 只要你能为哈希表提供额外的内存。

答案 1 :(得分:0)

我写了一个名为meshtool的工具,可以做你想做的事。

执行所需操作的过滤器称为normalize_indices

  --normalize_indices   Goes through all triangle sets, changing all index
                        values to go from 1 to N, replacing sources to be size
                        N

但是,它通常也适用于其他一些过滤器。我建议尝试类似的事情:

meshtool --load_collada yourfile.dae --medium_optimizations \
    --normalize_indices --save_collada yourfile-optimized.dae

您可以使用以下方式安装:

pip install meshtool