Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Actionscript 3 将二维对象映射到三维空间,保持二维大小_Actionscript 3_Papervision3d - Fatal编程技术网

Actionscript 3 将二维对象映射到三维空间,保持二维大小

Actionscript 3 将二维对象映射到三维空间,保持二维大小,actionscript-3,papervision3d,Actionscript 3,Papervision3d,我有一个papervision3d球体基本体,正在添加到场景中。球体的大小为半径285。但是,由于我的相机属性(缩放、聚焦和z),球体的渲染速度是206px,而不是我想要的570px(2*半径) 不久前,我发现了一篇关于这个问题的博客文章,其中解释说,可以使用以下方法将场景中任何对象的z设置为在3D空间中显示的大小与在2D空间中显示的大小相同: mySphere.z = (this.camera.zoom * this.camera.focus) - Math.abs(this.camera.z

我有一个papervision3d球体基本体,正在添加到场景中。球体的大小为半径285。但是,由于我的相机属性(缩放、聚焦和z),球体的渲染速度是206px,而不是我想要的570px(2*半径)

不久前,我发现了一篇关于这个问题的博客文章,其中解释说,可以使用以下方法将场景中任何对象的z设置为在3D空间中显示的大小与在2D空间中显示的大小相同:

mySphere.z = (this.camera.zoom * this.camera.focus) - Math.abs(this.camera.z) + radius;
当我使用几个块时,上面的方法有效,其中半径被替换为宽度/2。由于某些原因,这不适用于球体

关于如何在屏幕上显示直径为570px的球体,有什么想法和建议吗


谢谢。

这是无法实现的,至少不能精确实现。透视投影不会将球体映射到圆。查看此图像边缘的球体是如何变形的?

(来源:)

我完全明白你在说什么。但在我的情况下,我有一个单一的球体,就像你的晶格层中的一个(红色的)。这似乎映射到了一个我想做的圆圈——我只需要它是一个固定的大小。哈,9年来我完全没有收到你的回复。很抱歉。如果您的公式适用于其他对象,但不适用于球体(我假设为平面对象?),请想象您正在屏幕上绘制一个平面圆。如果可以正常工作,请记下圆的半径(r)和圆与相机位置的距离(d)。然后需要校正球体半径(使其变小),以便球体与圆锥体相切,圆锥体的底面是圆,尖端是相机位置。新的半径是r'=r*d/sqrt(r^2+d^2),非常感谢您的回复。我的老板一直在找我,让我弄清楚这件事,我真的开始觉得我在这件事上没时间了。“我想我可以在下周完成”这样的借口已经有9年了。再次感谢!