Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
THREE.js:将一个世界坐标单位转换为屏幕像素_Three.js - Fatal编程技术网

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。