我想要做的是通过球面ABC描述的双凹透镜模拟折射,其中CAB之间的球面。到目前为止,我已经收集到一种好的方法是在对此类对象进行建模时使用CSG。我无法理解如何实现这一点。有提到使用间隔算术,但我不明白它们应该对我有多大帮助。

评论

您能否告诉您在哪里找到了“使用间隔算法的提法”?

@rych本文中。

#1 楼

我不确定您到底要问什么,但是IIRC,要使用光线追踪进行CSG,您不仅要维护与对象的最近交点,还要维护[Inpoint,OutPoint]“间隔”距离的有序对列表。对于单球测试(或与此相关的任何实体凸基元),此列表最多具有一个[Inpoint,OutPoint]条目,如果未命中,则为空。

要实现CSG,您可以然后将二进制运算符应用于一对列表,这又意味着将它们以类似于对两个列表进行合并排序的方式应用于列表中的条目。

例如,对于交集,如果在一个列表中有[a,b],在另一个列表中有[c,d],则计算e = Max(a,c)f = Min(b, d)。如果e> f没有交集,则返回交集[e,f]。

有帮助吗?

评论


$ \ begingroup $
谢谢您的回答,也很抱歉我的问题如此含糊。我们的目标是使用CSG差运算符\以以下方式创建发散透镜:(C \ A)\B。对于一般方法,您对我来说更加清楚了,但我仍在努力实现\ 。您能给这个操作员举个例子吗?
$ \ endgroup $
–niksbenik
16年5月1日19:19



$ \ begingroup $
(希望我没错),如果从Intersection和Not构造差分算子,即A \ B = A ^〜B,会更容易吗?要生成〜B,您只需要“间隙”即可。例如,如果沿着射线的B的交点为{[b1,b2]},那么对于〜B则为{[-infinity,b1],[b2,+ inf]}。
$ \ endgroup $
–西蒙F
16年5月3日,10:50