【发布时间】:2012-06-26 18:27:38
【问题描述】:
短版:
我正在寻找一种技术,使几乎排序的数据随着时间的推移保持接近排序的顺序,尽管值略有变化。
这是场景:
在 3D 图形的世界中,在绘制之前将对象从前到后排序通常是有益的。随着您的场景发生变化或您的场景视图发生变化,这些数据可能需要重新排序,但是它通常会非常接近排序顺序(即,它不会在帧之间发生太大变化)。数据是否完全按排序顺序也不是很重要。将发生的最糟糕的事情是多边形将被渲染然后完全隐藏。这是一个小的性能损失,但不是世界末日。
考虑到这一点,是否可以提前对数据进行一次排序,然后每帧对数据应用一次最小的补丁,以确保数据保持大部分强>排序?在这种情况下,如果大多数对象按升序排列,则认为数据大部分已排序。也就是说,距离正确位置 10 步的 1 个对象比距离正确位置 1 步的 10 个对象好多(好 10 倍)。
还值得注意的是,数据可以继续半定期修补,因为数据通常每秒渲染 30 次(左右)。只要计算是有效的,它就可以随着时间的推移继续进行,直到更改停止并且列表完全排序。
现有想法:
我对这个问题的下意识反应是:
-
在加载数据时对数据应用
n log n排序,并对大的更改(我可以很容易地跟踪)进行排序。 -
当数据开始缓慢变化时(例如,当场景旋转时),对数据应用某种类型的单个(线性)传递以向后交换邻居并尝试保持排序顺序(我认为这基本上是 shell 排序 -也许有更好的算法可用于单次通过)。
-
继续对每一帧进行一次部分排序,直到更改停止并且数据完全排序
-
返回第 2 步,等待更多更改。
【问题讨论】:
标签: algorithm sorting opengl data-structures 3d