gpt4 book ai didi

algorithm - 寻找体素化策略的一些指示

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:57 24 4
gpt4 key购买 nike

体素化网格基本上意味着能够确定点 (x,y,z) 是在网格内部还是外部。

这里的网格只是一组原始的三角形。在网格之外意味着从任何角度来看都不与网格相交的点(具有任何方向)有一条射线。

对于行为良好、封闭、非相交的网格,这很容易:沿任何方向追踪一条射线,如果相交数为奇数,则该点在内部。

但是对于由开放部分组成的“坏”网格来说,这是很糟糕的。例如,网格可以是两个立方体,由一个粘在两个立方体中的开放圆柱体连接。

ZBuffer 渲染很好地解决了一个视点的问题。但问题是针对任何观点。对我来说,这个问题定义明确,但解决起来并不明显。

我正在寻找一些关于如何解决这个问题的建议。必须有大量的研究。有论文链接吗?或者我在如何思考这个问题上遗漏了什么?

最佳答案

如果网格上的所有表面都具有“侧面性”,即它们具有正面和背面,则这是可能的。

然后要确定一个点是否在网格内部,您可以从该点沿任何方向追踪一条射线,并像这样计算交叉点:

  • 如果光线穿过背面并从正面射出(即从内到外),则加一条。
  • 如果光线穿过正面并从背面射出(即从外部进入内部),则减去 1。
  • 如果网格表面是双面的,不要添加或减去任何东西。

如果最终计数为正,或者如果该点恰好位于任何表面上,则该点在网格内部。

您需要添加限制,即永远不可能从网格外部看到表面的暴露背面。这相当于说在启用背面剔除的情况下,网格应该始终从所有外部视点正确渲染。

对于立方体和开口圆柱体的示例,要使立方体是实心的,其表面应该是单面的(使它们成为双面的意味着定义一个具有无限薄壁的空心立方体)。

圆柱体的网格表面也必须是单面的,否则它也会有无限薄的壁,并且圆柱体内部的点(不在立方体内部的点)不会在网格内部。只要圆柱体的末端卡在立方体内部,限制就不会被打破,因为您永远看不到面部暴露的背面。

如果其中一个立方体被移除,则不满足限制,该算法将失败。

关于algorithm - 寻找体素化策略的一些指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33407602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com