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
Javascript 三个JS将三维尺寸转换为二维尺寸_Javascript_Three.js - Fatal编程技术网

Javascript 三个JS将三维尺寸转换为二维尺寸

Javascript 三个JS将三维尺寸转换为二维尺寸,javascript,three.js,Javascript,Three.js,我想将球体的世界空间坐标转换为屏幕空间坐标,以获得屏幕空间边界,然后使用该边界覆盖div 理想情况下,我希望扩展此函数以返回对象的高度和宽度以及x&y: TOScreen位置:功能(obj、摄像头) { 可以创建几个THREE.Object3D,并将它们定位在场景中要投影到屏幕的主对象边界的位置 然后,您可以在其他空对象上使用主对象上使用的方法,并获得主对象边界屏幕上的像素位置 例如,如果您想知道半径为5的球体边界的屏幕坐标: var first = new THREE.Object3D();

我想将球体的世界空间坐标转换为屏幕空间坐标,以获得屏幕空间边界,然后使用该边界覆盖div

理想情况下,我希望扩展此函数以返回对象的高度和宽度以及x&y:

TOScreen位置:功能(obj、摄像头) {


可以创建几个THREE.Object3D,并将它们定位在场景中要投影到屏幕的主对象边界的位置

然后,您可以在其他空对象上使用主对象上使用的方法,并获得主对象边界屏幕上的像素位置

例如,如果您想知道半径为5的球体边界的屏幕坐标:

var first = new THREE.Object3D();
var second = new THREE.Object3D();
var third = new THREE.Object3D();
var fourth = new THREE.Object3D();

first.position.set(sphere.x,sphere.y+5,sphere.z);
second.position.set(sphere.x,sphere.y-5,sphere.z);
然后,您可以应用您编写的函数,而不是:

obj.updateMatrixWorld();  
等等

你将做:

first.updateMatrixWorld();
second.updateMatrixWorld();
等等


然后,您将获得这两个对象的x、y坐标(位于主对象的边界上)在屏幕上,你可以通过减法来检查高度。

我将编写一个函数,将一个3D点作为输入,并返回2D屏幕点,如图中所示。然后,如果你处理一个球体,这将很容易:在3D中获取球体的中心,计算2D点,这将是叠加div的中心,获取任何3D点球体的表面,计算2D点,您将知道覆盖div所需的半径,从那里您可以轻松计算矩形区域。

我猜您的意思是要将世界空间坐标转换为屏幕空间坐标,以获得球体的屏幕空间边界?@Soviut您是正确的。您应该upda让你的问题和标题提到这些细节。你会得到更好的关注。@Soviut Updated我不太明白,你能提供一些示例代码吗?仅供参考:Object3d应该是Object3d,前者会抛出一个错误,因为它不是THREE.js构造函数object.Upvoted。对于仍然有问题的人,应该注意,这段代码只会如果将其放置在Three.js动画循环中的渲染函数之后,则可以正常工作。
first.updateMatrixWorld();
second.updateMatrixWorld();