如何从后到前遍历BSP树
How to traverse a BSP tree back to front
嗨,我正在写一个Quake关卡渲染器。我已经到了需要考虑透明度的地步了。我知道二进制空间分区器(BSP)树的格式化方式是数据按距离排序,或者至少我听说过这样,但我不知道如何实现这一点。我建立了我的BSP树,并解码了我的PVS。
我:1. 找出我在哪个叶子上。例如:6。2. 渲染从最大到叶子6,假定这些叶子在我的视锥体和pv中。3.从最小渲染到第6叶,再次考虑到pv和截锥体。
这不是BSP树的工作方式吗?
这就是问题1。第二个问题是关于pv的。我知道在过去,当空间是一个问题时,pv很棒,因为它是压缩的。我现在的方式是,我不会在每次渲染一帧时都解压pv,我只做一次,并将叶子的可见性存储在渲染过程中遍历的向量中。这样做有意义吗?还是会适得其反?
所以再次回顾一下,我可以假设一个BSP树的结构使得叶子已经按距离排序,并且在叶子6(总共9个叶子),我应该渲染9,8,7,6,1,2,3,4,5(假设所有9都在叶子6的pv中可见),再考虑到pv和截体。
谢谢。
要从后到前渲染,我建议首先遍历/递归相机所在的节点(近节点)。完成后,将遍历远节点。
相关文章:
- 有什么方法可以遍历结构吗
- 在循环中按顺序遍历成员变量
- 遍历模板参数
- 在遍历处理程序的向量时注册和注销处理程序
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 遍历并行数组以确定C++中的最大数字
- 遍历顺序由 std::文件系统directory_iterator给出
- 遍历链表时的无限循环
- 遍历unordered_map向量
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 如何正确地推回然后遍历堆中对象的向量?
- 遍历二维数组的所有子数组
- 如何在可变参数模板函数中遍历可变参数元组?
- 避免在遍历 IShellItemArray 时出现代码重复
- 从特定键开始遍历地图
- 关于链表遍历和调试的困惑
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 如何从后到前遍历BSP树