Three.js中的动态剪辑或CSG操作

时间:2017-01-30 21:54:24

标签: three.js geometry clipping threecsg

我已经看过Threejs网站中的Clipping示例和ThreeCSG操作,但我找不到一个“两者”的例子。

更具体地说,我需要一个PlaneBufferGeometry的PlaneGeometry,它将CSG操作应用为像剪裁一样平滑,但是这个PlaneGeometry可以移动,改变它的位置和方向。

例如,球体和平面在场景中,平面开始朝向Z并且在Y中旋转,始终切割球体的一侧,但是平面可以是一个盒子或任何其他物体

有可能吗?

1 个答案:

答案 0 :(得分:0)

让我们来看看两个单独的问题。

对于平面剪辑,事情很容易。

// plane in Z Direction
var plane = new THREE.Plane( new THREE.Vector3( 0, 0, 1), 1);
// tell the renderer to use it for clipping
renderer.clippingPlanes = [ plane ];
// enable clipping in the renderer
renderer.localClippingEnabled = true;
// create a new PhongMaterial
var material = new THREE.MeshPhongMaterial( {
                    side: THREE.DoubleSide,    // to be able to look inside
                    clippingPlanes: [ plane ], // the clipping plane
                    clipShadows: true          // also clip shadows
                } ),

正如您所见here

请注意,clippingPlanes是一个数组,因此您可以一次提供多个数组。

正如您所见here

裁剪和CSG之间的关键区别在于裁剪期间没有创建新几何体,因为它只检查三角形是否应该是渲染器。

对于CSG来说,它与众不同,因为它为每个操作创建了新的几何体。

将CSG视为NewObject = ObjectA - ObjectB

这是一个运行更多的任务算法,可能无法实时完成,具体取决于对象的复杂程度。

因此可以组合CSG然后在结果对象上使用剪裁平面。