高效合并交错索引数据

Posted

技术标签:

【中文标题】高效合并交错索引数据【英文标题】:Merge interleaved index data efficiently 【发布时间】:2014-10-02 18:17:21 【问题描述】:

就像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指一个法线向量。

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

有没有更有效的方法来做到这一点?

【问题讨论】:

正如@derhass 在下面的答案中所建议的那样,使用比列表更有效的数据结构。我在这里的答案中发布了一些伪代码:***.com/questions/23349080/…。 【参考方案1】:

所以真正慢的部分是在列表中搜索 - 所以不要这样做。在那种情况下,使用哈希表会大大加快速度——我实际上已经实现了类似的东西,而且效果非常好——只要你能负担得起哈希表的额外内存。

【讨论】:

内存应该不成问题 - 我会试试看 :)【参考方案2】:

我写了一个名为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

【讨论】:

以上是关于高效合并交错索引数据的主要内容,如果未能解决你的问题,请参考以下文章

机器学习时代哈希算法如何高效索引数据?

机器学习时代的哈希算法,将如何更高效地索引数据

索引设计 《数据库高效优化》 p300

Pandas技巧:万能转格式轻松合并压缩数据,让数据分析更高效

高效的 SQL 表合并和分页

如何在AI时代通过哈希算法更高效地索引数据