我正在帮助Transform tutorial的示例代码进行轮换和位置更改。我面临着一些问题。
我想在门窗上进行旋转。目前旋转轴穿过中心。如何更改从通过其侧面的轴旋转对象。
位置变更>当我改变位置让我们说任何方向的窗户,它移动但它在墙上可见。当窗户与墙壁碰撞时,我希望它隐藏起来。
答案 0 :(得分:1)
1 /这是一个代码片段,演示了如何旋转元素(片段),有关更完整的示例,请查看本文:Rotate Components Control for the Viewer
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代码,该代码计算两个网格是否相交(三角形 - 三角形交叉算法)并针对您正在移动的组件以及周围的所有墙运行。以下内容可以让您走上正轨:How to detect collision in three.js?
希望有所帮助