THREE.js:将一个世界坐标单位转换为屏幕像素
例如,我有一个单位立方体。当没有缩放时,我想得到一个坐标单位,由多少屏幕像素表示 当我放大时,这个坐标单位由多少屏幕像素表示THREE.js:将一个世界坐标单位转换为屏幕像素,three.js,Three.js,例如,我有一个单位立方体。当没有缩放时,我想得到一个坐标单位,由多少屏幕像素表示 当我放大时,这个坐标单位由多少屏幕像素表示 我不完全确定我是否理解了你的问题,但要获得任意两个向量之间的距离,请执行以下操作: const distanceAB = new THREE.Vector3(1,1,1).sub( new THREE.Vector3(2,2,2) ).length() 您的单位立方体将具有类似(-1,-1,-1)和(1,1,1)等顶点(或实际上为0.5)。无论哪种方式,您都需要获得这
我不完全确定我是否理解了你的问题,但要获得任意两个向量之间的距离,请执行以下操作:
const distanceAB = new THREE.Vector3(1,1,1).sub( new THREE.Vector3(2,2,2) ).length()
您的单位立方体将具有类似(-1,-1,-1)和(1,1,1)等顶点(或实际上为0.5)。无论哪种方式,您都需要获得这些值(使用THREE.Geometry
比BufferGeometry
更容易)
然后投影这些顶点
const vertexA = new THREE.Vector3() // set this from cube
const vertexB = new THREE.Vector3()
const screenSpaceVector = new THREE.Vector3().subVectors(vertexA.project(myCamera),vertexB.project(myCamera))
结果现在是NDC,它是一个从-1到1的立方体。要使其正常化:
screenSpaceVector.multiplyScalar(0.5).add(new THREE.Vector3(0.5,0.5,0.5))
最后计算出这是多少像素
screenSpaceVector.x *= renderer.getSize().width
screenSpaceVector.y *= renderer.getSize().height
screenSpaceVector.z = 0
const pixelLength = screenSpaceVector.length()
我认为应该采取措施//将NDC标准化为1到0:screenSpaceVector.x=(screenSpaceVector.x+1)*0.5;screenSpaceVector.y=(1-screenSpaceVector.y)*0.5;嗯,不太确定,你不应该翻动y。