"vector.project" 到相机的归一化屏幕位置? (反应三纤维)

"vector.project" to the Normalized Screen Position of the Camera? (react-three-fiber)

请帮我找到我的 3D 模型的每个 Vector3 的标准化屏幕位置。我试图用“vector.project(camera)”的方法来单独保存投影屏幕矢量,但似乎不起作用。我将这些矢量用于相机光线投射。

Codesandbox:code

好的,这就是您现在正在做的事情:

// Calling project() on the object's position changes its value
const vector = ref.current.position.project(camera);
const projVec = new THREE.Vector3(vector.x, vector.y, vector.z);

正如我们在评论中讨论的那样,在向量上调用 .project() 会将其重置在 [-1, 1] 范围内。这就是 the documents describe。因此,当您获取模型的位置并调用 project() 时,您将其位置更改为 [-1, 1] 范围内的某个位置!

就像我建议的那样,您必须创建一个新向量,然后在新向量上调用项目,而不是在对象的位置上:

// Create new vector
const projVec = new THREE.Vector3();

// Copy the object's position into new vector
projVec.copy(ref.current.position);

// Perform projection on NEW vector
projVec.project(camera);

// Now we have a vector in screen-space [-1, 1] range
console.log(projVec);