这可能是我忽略的简单事情。但是我试图在平移之后获得Object3D
的位置。我使用OrbitControls
。
我已尝试object.position
,但返回的结果始终相同。这是一个例子:
https://jsfiddle.net/jmg157/b9xxdubc/
我尝试了grid.position
,但同样,它总是返回(0, 0, 0)
,因为我最初设置了它。我也尝试为DOM元素(container
)设置ID,并使用jQuery的position()
方法,但也没有运气。
因此,如果我右键单击并平移网格,我如何在屏幕上获得网格的新位置(即顶部,左侧)?
一如既往,非常感谢!
答案 0 :(得分: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;
}
left
为vector.x
且top
为vector.y
。