gpt4 book ai didi

three.js - 使用 bufferGeometry 获取 THREE.js Points 对象中顶点的屏幕坐标

转载 作者:行者123 更新时间:2023-12-04 00:36:05 25 4
gpt4 key购买 nike

我想让一个 DOM 节点在我的 THREE.js 模拟中跟踪一个粒子。我的模拟是使用 Points 对象构建的,使用 bufferGeometry。我在渲染循环中设置每个顶点的位置。在模拟过程中,我正在移动/旋转相机和 Points 对象(通过其父 Object3d)。

我不知道如何为我的任何粒子获取可靠的屏幕坐标。我已经按照其他问题的说明进行操作,例如 Three.JS: Get position of rotated object , 和 Converting World coordinates to Screen coordinates in Three.js using Projection ,但它们似乎都不适合我。在这一点上,我可以看到计算出的顶点投影随着我的相机移动和对象旋转而变化,但并不是以我可以实际映射到屏幕的方式。此外,有时在屏幕上彼此相邻的两个粒子会产生截然不同的投影位置。

这是我最近的尝试:

const { x, y, z } = layout.getNodePosition(nodes[nodeHoverTarget].id)

var m = camera.matrixWorldInverse.clone()

var mw = points.matrixWorld.clone()

var p = camera.projectionMatrix.clone()

var modelViewMatrix = m.multiply(mw)
var position = new THREE.Vector3(x, y, z)
var projectedPosition = position.applyMatrix4(p.multiply(modelViewMatrix))
console.log(projectedPosition)

本质上,我已经在我的着色器中复制了这些操作来派生 gl_Position

projectedPosition 是我要存储屏幕坐标的地方。

如果我遗漏了一些明显的东西,我很抱歉......我已经尝试了很多东西,但到目前为止没有任何效果:/

在此先感谢您的帮助。

最佳答案

我想通了...

var position = new THREE.Vector3(x, y, z)

var projectedPosition = position.applyMatrix4(points.matrixWorld).project(camera)

关于three.js - 使用 bufferGeometry 获取 THREE.js Points 对象中顶点的屏幕坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com