1/ Вот фрагмент кода, который иллюстрирует, как вращать элементы (фрагменты). Более полный пример можно найти в этой статье: Управление поворотом компонентов для средства просмотра
rotateFragments (model, fragIdsArray, axis, angle, center) {
var quaternion = new THREE.Quaternion()
quaternion.setFromAxisAngle(axis, angle)
fragIdsArray.forEach((fragId, idx) => {
var fragProxy = this.viewer.impl.getFragmentProxy(
model, fragId)
fragProxy.getAnimTransform()
var position = new THREE.Vector3(
fragProxy.position.x - center.x,
fragProxy.position.y - center.y,
fragProxy.position.z - center.z)
position.applyQuaternion(quaternion)
position.add(center)
fragProxy.position = position
fragProxy.quaternion.multiplyQuaternions(
quaternion, fragProxy.quaternion)
if (idx === 0) {
var euler = new THREE.Euler()
euler.setFromQuaternion(
fragProxy.quaternion, 0)
this.emit('rotate', {
dbIds: this.selection.dbIdArray,
fragIds: fragIdsArray,
rotation: euler,
model
})
}
fragProxy.updateAnimTransform()
})
}
2/Когда вы преобразовываете геометрию, вы просто перемещаете треугольники, нет встроенной логики, которая будет скрывать компоненты, потому что они перекрываются, вам нужно будет реализовать это самостоятельно. Вы должны быть в состоянии найти код Three.js, который вычисляет, пересекаются ли две сетки (алгоритм пересечения треугольник-треугольник), и запускать его для компонента, который вы перемещаете, и всех стен вокруг. Вот кое-что, что может поставить вас в тупик: Как обнаружить столкновение в three.js ?
надеюсь, это поможет
person
Philippe
schedule
17.10.2017