我已经看过Threejs网站中的Clipping示例和ThreeCSG操作,但我找不到一个“两者”的例子。
更具体地说,我需要一个PlaneBufferGeometry的PlaneGeometry,它将CSG操作应用为像剪裁一样平滑,但是这个PlaneGeometry可以移动,改变它的位置和方向。
例如,球体和平面在场景中,平面开始朝向Z并且在Y中旋转,始终切割球体的一侧,但是平面可以是一个盒子或任何其他物体
有可能吗?
答案 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然后在结果对象上使用剪裁平面。