我有一个 3D 通道,其中包含模拟液体的圆柱体。 这是一个例子 问题是圆柱体可能与墙壁重叠并透过它们显示出来。
我想我需要使用裁剪平面来解决这个问题。计算平面不是问题,但据我了解,我需要知道通道壁的内部法线来确定应该渲染平面的哪个方向?我没有那些。我该如何解决这个问题?或者还有其他方法吗?
你确实有法线,你只需要做数学就能得到它们,
three.js
可以提供帮助。
考虑您的“通道”有一个平行于 YZ 平面构建并面向 -X 的平面。在这种情况下,正常很简单:
let nor = new Vector3( -1, 0, 0 )
但是如果拐角是弯的怎么办?只要您知道曲线的弧度是如何定义的,您还可以找到您想要的曲线周围任何增量的法线。
对于内墙:
let nor = new Vector3( 1, 0, 0 )
将是+X方向上的单位向量let axis = new Vector3( 0, 1, 0 )
Vector3.applyAxisAngle
将法线向量旋转您选择的增量(以弧度为单位)。 nor.applyAxisAngle( axis, rad )
就是这样。这是内壁的正常情况。对于外墙,执行相同的操作,但使用
Vector3.negate
反转法线:
nor.negate()
Material.clippingPLanes
是 Array
。但除此之外,您可能需要采取措施确保平面不会相互干扰(平面在每个平面方向上都是无限的)。查看裁剪交叉点示例,了解避免裁剪平面串扰的方法。