如何在 Three.js 中编写一个 getworldposition 函数?

How to write a getworldposition function in Three.js?

如何在 Three.js 中编写一个 getworldposition 函数,returns 一个向量?

这是我的代码,用于获取存储在向量 vec 中的 obj 的世界位置。

obj.updateMatrixWorld();
var vec= new THREE.Vector3();
vec.setFromMatrixPosition(obj.matrixWorld);

现在我想将这三行作为一个函数来使用:

var vector = getWorldPosition(obj);

这样做正确吗?

function getWorldPosition(obj)
{
    obj.updateMatrixWorld();
    var vec= new THREE.Vector3();
    vec.setFromMatrixPosition(obj.matrixWorld);
    return {vec.x, vec.y, vec.z}; // Like this?
}

尝试查看 Jerome Etienne 是如何构建他的 ObjCoord 库来获得灵感的:

https://github.com/jeromeetienne/threex.objcoord

但是有点过时了:

/**
 * get the world position
 * @return {THREE.Vector3}  the world position
 */
THREEx.ObjCoord.worldPosition = function(object3d){
  object3d.updateMatrixWorld();
  var worldMatrix = object3d.matrixWorld;
  var worldPos  = new THREE.Vector3().getPositionFromMatrix(worldMatrix);
  return worldPos;
}

你直接使用向量的方法是最新的三个版本的正确方法。

现在您可以使用 Object3D().getWorldPosition ( target ) 获取世界位置

target — 结果将被复制到这个 Vector3 中。 Returns 表示对象在世界中位置的向量 space。

示例:

const anyMesh = new THREE.Mesh(g,m) let handVec = new THREE.Vector3() anyMesh.getWorldPosition(handVec)

所以 handVec 是 anyMesh 的世界位置

更多细节你可以查看文档:https://threejs.org/docs/#api/core/Object3D