使用bufferGeometry获取THREE.js Points对象中顶点的屏幕坐标
我想让DOM节点在THREE.js模拟中跟踪粒子。我的模拟是使用点对象构建的,使用缓冲几何体。我正在设置渲染循环中每个顶点的位置。在模拟过程中,我移动/旋转摄影机和点对象(通过其父对象Object3d) 我不知道如何为我的任何粒子获得可靠的屏幕坐标。我在其他问题上遵循了说明,比如,和,但它们似乎都不适合我。在这一点上,我可以看到顶点的计算投影随着我的相机移动和对象旋转而改变,但不是以我能够实际映射到屏幕的方式。此外,有时屏幕上相邻的两个粒子会产生截然不同的投影位置 以下是我的最新尝试:使用bufferGeometry获取THREE.js Points对象中顶点的屏幕坐标,three.js,projection,buffer-geometry,Three.js,Projection,Buffer Geometry,我想让DOM节点在THREE.js模拟中跟踪粒子。我的模拟是使用点对象构建的,使用缓冲几何体。我正在设置渲染循环中每个顶点的位置。在模拟过程中,我移动/旋转摄影机和点对象(通过其父对象Object3d) 我不知道如何为我的任何粒子获得可靠的屏幕坐标。我在其他问题上遵循了说明,比如,和,但它们似乎都不适合我。在这一点上,我可以看到顶点的计算投影随着我的相机移动和对象旋转而改变,但不是以我能够实际映射到屏幕的方式。此外,有时屏幕上相邻的两个粒子会产生截然不同的投影位置 以下是我的最新尝试: cons
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\u位置
projectedPosition
是我要存储屏幕坐标的位置
如果我错过了一些明显的东西,我很抱歉。。。我尝试了很多方法,但到目前为止没有任何效果:/
提前感谢您的帮助。我想好了
var position = new THREE.Vector3(x, y, z)
var projectedPosition = position.applyMatrix4(points.matrixWorld).project(camera)
你有没有可能加上一把小提琴来重现这个问题?