三人剪墙

问题描述 投票:0回答:1

我有一个 3D 通道,其中包含模拟液体的圆柱体。 这是一个例子 问题是圆柱体可能与墙壁重叠并透过它们显示出来。

我想我需要使用裁剪平面来解决这个问题。计算平面不是问题,但据我了解,我需要知道通道壁的内部法线来确定应该渲染平面的哪个方向?我没有那些。我该如何解决这个问题?或者还有其他方法吗?

three.js clipping
1个回答
0
投票

你确实有法线,你只需要做数学就能得到它们,

three.js
可以提供帮助。

考虑您的“通道”有一个平行于 YZ 平面构建并面向 -X 的平面。在这种情况下,正常很简单:

let nor = new Vector3( -1, 0, 0 )

但是如果拐角是弯的怎么办?只要您知道曲线的弧度是如何定义的,您还可以找到您想要的曲线周围任何增量的法线。

对于内墙:

  1. 在远离圆弧中心的起始方向上取法线,就像
    let nor = new Vector3( 1, 0, 0 )
    将是+X方向上的单位向量
  2. 如果您的圆弧围绕 Y 轴,则使用创建第二个向量来捕获该信息:
    let axis = new Vector3( 0, 1, 0 )
  3. 使用
    Vector3.applyAxisAngle
    将法线向量旋转您选择的增量(以弧度为单位)。
    nor.applyAxisAngle( axis, rad )

就是这样。这是内壁的正常情况。对于外墙,执行相同的操作,但使用

Vector3.negate
反转法线:

  1. nor.negate()

现在,对于每个位置,您需要定义一个剪切平面。没关系,因为

Material.clippingPLanes
Array
。但除此之外,您可能需要采取措施确保平面不会相互干扰(平面在每个平面方向上都是无限的)。查看裁剪交叉点示例,了解避免裁剪平面串扰的方法。

© www.soinside.com 2019 - 2024. All rights reserved.