Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 在对象层次结构中排序同级_Sorting_Tree_Rendering_Hierarchical Data_Scenegraph - Fatal编程技术网

Sorting 在对象层次结构中排序同级

Sorting 在对象层次结构中排序同级,sorting,tree,rendering,hierarchical-data,scenegraph,Sorting,Tree,Rendering,Hierarchical Data,Scenegraph,我已经实现了一个在2D游戏中使用的场景树。树节点包含变换和可绘制对象 这是场景树的外观: Root | -------------------------- | | Layer1 Layer2 | | --------------

我已经实现了一个在2D游戏中使用的场景树。树节点包含变换和可绘制对象

这是场景树的外观:

                    Root
                     |
        --------------------------
        |                        |
      Layer1                   Layer2
        |                        |
-----------------            ---------
|       |       |            |       |
A       B       C            F       G
        |
    ---------
    |       |
    D       E
为了绘制场景,首先按深度优先顺序遍历树。在遍历期间,将在渲染队列中收集可绘制内容。然后将渲染队列传递给要处理的渲染器

由于可绘制内容是按深度优先顺序收集的,因此渲染器绘制它们的顺序也是如此。要更改绘图顺序,我必须重新排列树节点。例如,如果希望在节点F之前绘制节点G,则必须交换它们。我想改变这一点,这样节点就不必再重新排列了。相反,渲染器应该能够自己对渲染队列进行排序

问题:

每组同级节点(例如[A、B、C]或[F、g]或[D、e])必须单独排序,以便层次结构保持完整。如果直接对树节点进行排序,则这不是问题。但是,如果将树展平为渲染队列,事情就会变得复杂

我的问题:

如何在不干扰节点层次结构的情况下对渲染队列进行排序?
对于这类问题有其他解决方案吗

其他信息:

我能找到的最好的资源就是博客文章。它解释了如何使用由多个信息块组合而成的64位密钥对渲染队列进行排序。不过,这并不能解决我的问题

您可能会问,为什么我不满足于直接对树节点进行排序。有两个原因:第一,我想把关注点分开。在场景树中重新排列节点,以便渲染器以正确的顺序绘制节点,这将无助于实现此目标。其次,不可能从排序中排除不可见的节点/可绘制项(而渲染队列仅包含可见的可绘制项)