3D透视投影看起来不正确

时间:2012-04-28 02:12:56

标签: 3d projection cube perspective

我一直在使用3D透视投影公式:

sx = wx*scale/wz
sy = wy*scale/wz

它投射的东西很好,但是例如一个立方体看起来更像一个矩形棱镜,并且真的伸展开来。

看起来像这样:

enter image description here

我已经对它进行了研究,并在stackoverflow上查看了其他页面,但我真的不明白它为什么会延伸它。

我还尝试了其他替代方法,例如将z值除以2或4,或者使用某个任意值使其看起来更像是立方体,但对于更复杂的对象,它并没有真正做到这一点。

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

您的投影看起来像一个极端的广角视图。这是一个“正确的”透视投影 - 你的公式是正确的,但关键是scale变量/常数。

scale的值通常是

screen_width_in_pixels * focal_length

其中focal_length是观看者眼睛与屏幕之间的距离与屏幕宽度的比率。当然,你无法控制某人坐在他们的显示器前面的距离,所以你猜。 1.0 - 1.5通常是一个很好的范围。

当您将该值更改为较小的广角时,副作用将是“相机”将“放大”您的对象,并可能填满屏幕。因此,您需要通过将物体远离相机移动来进行补偿。

当然有一个很好的长Wikipedia article on the subject

答案 1 :(得分:0)

我有同样的问题'当试图在html5的画布上渲染一个框时。是什么让拉伸的盒子看起来很正常'对我来说,将相机位置a Camera Formula z 值设置为-250而不是我使用的-50。然后,根据您用于计算x,y坐标的公式,您可以调整查看器的z位置(ez)

a Viewer

或从记录表面到入瞳(rz)的距离,以放大您的物体。

a formula

我知道问题是在半年前提出的,但是由于我没有找到任何帮助我的答案,所以我决定分享自己的经验。希望它可以帮助某人。