现在,我想向我的八叉树添加“形状” – 具体来说,是由三角形组成的表面网格.这些三角形的顶点不对应于存储在八叉树中的点.如何在八叉树中存储这些形状?我看到两个选项…
灰色节点为“空”,因为它们没有形状.在替代方案1中,形状存储在它们相交的每个节点中,即,节点1a包含形状1和4c& 4d分享形状2.在替代方案2中,形状仅存储在它们相交的最小节点中,节点1a包含shape1,节点4包含shape2.
我看过的八倍的大多数帖子都假设Alt1,但是他们从来没有解释为什么. Alt2对我来说更有意义,只会为驻留在节点边界上的那些形状创建额外的工作.为什么Alt1更好?
编辑:为了澄清,我使用的实现语言是C,所以我更喜欢该语言的示例实现,但问题是与语言无关.抱歉,如果标签使用不正确
编辑2:虽然与形状存储问题没有直接关系,但this link对八叉树遍历问题进行了很好的讨论.我以为可能会帮助任何有兴趣在这个问题上工作的人.
解决方法
作为一个反例,想象一下ALT2包含斯坦福兔子的详细模型,站在一个大三角形上.大三角形可以防止将根节点细分为子节点,因此您的八叉树就好像没有八叉树一样好.
或者,您必须保留根节点中的大三角形,并将其细分为包含其余小兔子三角形的子节点.三角形不仅在叶节点中,而且在其他节点中也可能使八叉树遍历复杂化(但也取决于您的应用程序).如果我们坚持使用光线追踪方案,要找到最近的光线和三角形交叉点,则必须检查节点和所有子节点,以便找到最接近的交点,并且您必须跟踪光线的移动到下一个节点,同时在所有树级上.另一方面,如果几何仅在叶子中,则按照光线访问它们的顺序测试叶子中的三角形(同时跟踪已经测试的三角形,以避免测试相同的三角形).
原文地址:https://www.jb51.cc/c/113927.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。