Динамическое обрезание или операции CSG в Three.js

Я ознакомился с примерами отсечения на сайте Threejs и операциями ThreeCSG, но я не могу найти пример, в котором есть "оба".

Чтобы быть более точным, мне требуется PlaneGeometry из PlaneBufferGeometry, который применяет операцию CSG так же плавно, как вырезание, но эта PlaneGeometry может перемещаться, изменяя свою позицию и ориентацию.

Например, сфера и плоскость находятся на сцене, плоскость начинает ориентироваться в Z и вращается в Y, постоянно обрезая одну сторону сферы, но плоскостью может быть коробка или любой другой объект.

Является ли это возможным?

1 ответ

Давайте посмотрим на две отдельные проблемы.

Для Plane Clipping все довольно легко сделать.

// 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
                } ),

Как вы можете видеть здесь.

Обратите внимание, что clippingPlanes являются массивом, чтобы вы могли предоставить более одного за раз.

Как вы можете видеть здесь.

Основное различие между отсечкой и CSG заключается в том, что во время отсечения новая геометрия не создается, поскольку она только проверяет, должен ли треугольник отображаться или нет.

Для CSG все по-другому, поскольку он создает новую геометрию для каждой операции.

Думайте о CSG как NewObject = ObjectA - ObjectB,

Это гораздо более сложный алгоритм работы, который может быть недоступен в реальном времени, в зависимости от сложности ваших объектов.

Таким образом, было бы возможно объединить CSG и затем использовать плоскости отсечения в результирующем объекте.

Другие вопросы по тегам