java 投影转换算法_java – 如何将3D点转换为2D透视投影?

我看到这个问题有点老了,但我决定给那些谁通过搜索找到这个问题的答案。

现在表示2D / 3D变换的标准方式是通过使用齐次坐标。 [x,y,w]表示2D,[x,y,z,w]表示3D。由于在3D和翻译中有三个轴,所以该信息完美地适合于4×4变换矩阵。我将在这个解释中使用列主矩阵符号。除非另有说明,所有矩阵都是4×4。

从3D点到光栅化点,线或多边形的阶段如下所示:

>使用逆相机矩阵转换您的3D点,然后跟他们需要的任何转换。如果你有表面法线,变换他们,但w设置为零,因为你不想翻译法线。你转换法线的矩阵必须是各向同性的;缩放和剪切使得法线畸形。

>使用剪裁空间矩阵转换点。该矩阵用视场和纵横比缩放x和y,通过近和远剪裁平面缩放z,并将“旧”z插入w。变换后,你应该把x,y和z除以w。这被称为透视分割。

>现在,您的顶点位于剪辑空间中,并且您想要执行剪切,因此您不会在视口边界之外渲染任何像素。萨瑟兰 – 霍奇曼剪辑是最广泛使用的剪切算法。

>相对于w和半宽和半高变换x和y。您的x和y坐标现在在视口坐标中。 w被丢弃,但是1 / w和z通常被保存,因为需要1 / w在多边形表面上进行透视校正插值,并且z被存储在z缓冲器中并用于深度测试。

这个阶段是实际的投影,因为z不再用作位置中的组件。

算法:

计算视场

这将计算视场。 tan是否取弧度或度是不相关的,但角度必须匹配。注意,当角度接近180度时,结果达到无穷大。这是一个奇点,因为它不可能有一个广泛的焦点。如果想要数值稳定性࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值