【问题标题】:Getting position of Object3D after panning平移后获取 Object3D 的位置
【发布时间】:2015-03-09 00:32:57
【问题描述】:

这可能是我忽略的一些简单的事情。但我试图在平移后获得Object3D 的位置。我正在使用OrbitControls

我试过object.position,但返回的结果总是一样的。这是一个示例小提琴:

https://jsfiddle.net/jmg157/b9xxdubc/

我尝试了grid.position,但同样,它总是返回(0, 0, 0),就像我最初设置的那样。我还尝试为 DOM 元素 (container) 设置一个 ID,并使用 jQuery 的 position() 方法,但也没有运气。

那么如果我右键单击并在网格周围平移,我如何才能获得网格在屏幕上的新位置(即顶部、左侧)?

一如既往,非常感谢!

【问题讨论】:

  • @gaitat 链接的问题涉及获取对象的世界旋转,我正在寻找屏幕上的对象位置。我不认为这些是重复的问题。
  • 看电话mesh.matrixWorld.decompose( position, quaternion, scale );

标签: three.js


【解决方案1】:

这似乎可以解决问题,感谢这个问题的回答:Converting 3D position to 2d screen position [r69!]

每当控件发生变化(即平移、旋转等)时,我都会调用此方法来获取更新的位置。

function getScreenPosition(object, camera) {

    var vector = new THREE.Vector3();

    var widthHalf = 0.5 * renderer.context.canvas.width;
    var heightHalf = 0.5 * renderer.context.canvas.height;

    object.updateMatrixWorld();
    vector.setFromMatrixPosition(object.matrixWorld);
    vector.project(camera);

    vector.x = (vector.x * widthHalf) + widthHalf;
    vector.y = -(vector.y * heightHalf) + heightHalf;
    return vector;

}

其中leftvector.xtopvector.y

【讨论】:

  • 如果你想得到对象的左上角怎么办?请记住它可能会被旋转。
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多