【问题标题】:box3.setFromObject doesn't match object.locationbox3.setFromObject 与 object.location 不匹配
【发布时间】:2015-08-01 00:23:48
【问题描述】:

我有一个对象(加载了加载程序,stl),我试图在移动它时创建一个“捕捉”效果。

我从对象创建了一个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);

所以 location 和 box-min 不适合,它们应该适合。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    box3 minmax 是 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 )

    【讨论】:

    • 谢谢,我现在明白这个问题了。但是我如何计算我想要的值呢?如果我执行“box.min.x -= activeElement.position.x”,它仍然与值不匹配。
    • 添加:等等,如果我移动对象(不是缩放/旋转,只是移动),我的 box.min 和 box.max 值会发生变化。那怎么可能呢? --
    • 它们改变是正确的,它们是 3D 空间中的。我更新了如何获取边界框大小的答案,因为也许这就是您要计算的内容。
    • 我创建了一个聊天室来解释我想要的更多内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多