改变旋转轴
change axis of rotation
我正在借助 Transform tutorial 的示例代码进行旋转和位置更改。我面临几个问题。
我想在门上执行旋转 window。当前旋转轴穿过中心。我怎样才能更改为从穿过其侧面的轴旋转对象。
对于位置变化 > 当我改变位置时,可以说 window 在任何方向上,它移动但在墙上可见。我想让它在 window 撞墙时隐藏。
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?
希望对您有所帮助
我正在借助 Transform tutorial 的示例代码进行旋转和位置更改。我面临几个问题。
我想在门上执行旋转 window。当前旋转轴穿过中心。我怎样才能更改为从穿过其侧面的轴旋转对象。
对于位置变化 > 当我改变位置时,可以说 window 在任何方向上,它移动但在墙上可见。我想让它在 window 撞墙时隐藏。
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?
希望对您有所帮助