平移后获取 Object3D 的位置
Getting position of Object3D after panning
这可能是我忽略的简单问题。但我试图在平移后获得 Object3D
的位置。我正在使用 OrbitControls
.
我试过object.position
,但返回的结果总是一样的。这是一个例子 fiddle:
https://jsfiddle.net/jmg157/b9xxdubc/
我试过 grid.position
,但它总是返回 (0, 0, 0)
,正如我最初设置的那样。我还尝试为 DOM 元素 (container
) 设置一个 ID,并使用 jQuery 的 position()
方法,但也没有成功。
所以如果我右键单击并在网格周围平移,我如何才能获得网格在屏幕上的新位置(即顶部、左侧)?
一如既往,非常感谢!
这似乎可以解决问题,感谢这个问题的回答: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;
}
其中 left
是 vector.x
,top
是 vector.y
。
这可能是我忽略的简单问题。但我试图在平移后获得 Object3D
的位置。我正在使用 OrbitControls
.
我试过object.position
,但返回的结果总是一样的。这是一个例子 fiddle:
https://jsfiddle.net/jmg157/b9xxdubc/
我试过 grid.position
,但它总是返回 (0, 0, 0)
,正如我最初设置的那样。我还尝试为 DOM 元素 (container
) 设置一个 ID,并使用 jQuery 的 position()
方法,但也没有成功。
所以如果我右键单击并在网格周围平移,我如何才能获得网格在屏幕上的新位置(即顶部、左侧)?
一如既往,非常感谢!
这似乎可以解决问题,感谢这个问题的回答: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;
}
其中 left
是 vector.x
,top
是 vector.y
。