我有一个对象(加载了装载程序,stl),我试图创建一个' snpping'移动时的效果。
我从对象创建了一个THREE.Box3
来做一些检测,但我注意到我的Box3
与我的对象的位置object.location
不匹配。
我确定我搞乱了世界空间,本地空间等等,所以任何人都可以解释我如何解决这个问题以及什么是什么?
代码:
var box = new THREE.Box3().setFromObject(activeElement);/
$("#debug").html(
"<p>location: <span>" + activeElement.position.x + " - " + activeElement.position.z + "</span></p>" +
"<p>box - min: <span>" + box.min.x + " - " + box.min.z + "</span></p>" +
"<p>box - max: <span>" + box.max.x + " - " + box.max.z + "</span></p>" +
"<p>sceneScale: <span>" + sceneScale);
所以位置和盒子不适合他们应该适合的地方。
答案 0 :(得分:1)
box3
min
和max
是3D空间中的点向量,从边界框前面的左下角到右上角。
请参阅此BoxGeometry
的简单示例值,其大小为(10,10,10)
:
mesh.position { x: 0, y: 5, z: 0 }
box.min { x: -5, y: 0, z: -5 }
box.max { x: 5, y: 10, z: 5 }
http://jsfiddle.net/L0rdzbej/12/
更新:如在Chat中所示,要将对象放在另一个边界框旁边,请使用此公式(用于捕捉x轴的一侧):
newPosition.x = otherBox.min.x - ( (activeElement.max.x - activeElement.min.x ) / 2 )