【菜鸟也能玩转OpenGL】3D技术中的相机变换

本系列文章由 莫问 出品,转载请注明出处。

文章链接:http://blog.csdn.net/mni2005/article/details/27228111

作者莫问(mni2005)   邮箱:mni2005@163.com


我个人一直感觉只要有点向量几何知识,相机变换是3D技术中最简单的一部分。但是我不知道为什么,好多网上、书上讲解的相机变换,令很多初学者看的云里雾里的。

1. 什么是相机变换

所谓相机变换,就是将世界坐标系中的点,变换到相机坐标系中。也就是说,一个坐标点在世界坐标系和相机坐标系中有两种不同的表示,我们需要根据相机坐标系的信息以及坐标点在世界坐标系中的表示,换算出它在相机坐标系中的表示。

2. 如何描述相机坐标系

通过以前的博文我们了解到要描述相机坐标系,需要一个参考坐标系,这个参考坐标系我们一般都选择世界坐标系,当然你也可以选择其它坐标系。相机坐标系的类型可以为直角坐标系,也可以圆柱坐标系 、球面坐标系等,只是不同的坐标系将产生不同的相机模型。

这里我们选择世界坐标系作为相机坐标系的参考,相机坐标系的类型我们选择最常见的直角坐标系,也叫笛卡尔坐标系。既然参考坐标系,坐标系类型我们都确定了,那么下面我看看该如何用数学来描述该相机坐标系,以方便我们后面的相机变换推导。

我们假设相机在世界坐标系的P(x, y, z) 点,用向量表示为P;相机坐标系三个相互垂直的轴,我们用向量U(Ux, Uy, Uz),N(Nx, Ny, Nz),V(Vx, Vy, Vz)表示,当然这三个向量也是以世界坐标系作为参考的;这里我们规定UNV全部为单位向量。如下图所示:

3. 相机变换推导

1.预备知识

在进行相机变换推导之前,我们先来看看向量的点乘的公式:

u * v = |u|*|v|*cos(u,v)

当向量v为单位向量时,v的模为1,这时上面的公式变成了u * v = |u|cos(u,v),此时我们看到u*v的几何意义变成了向量u在向量v方向上的投影长度,如下图所示:

由于向量点乘满足交换律,因此上面的分析可以用一句话概括:向量与单位向量点乘的的几何有意义为向量在单位向量方向上的投影长度。如果我们要计算向量u在v方向的投影向量更简单,投影长度乘以单位向量v,就是向量u在v方向的投影,于是有下面公式:

prj(u, v) = u * v *v = |u|cos(u,v)*v      (v为单位向量)

2.旋转变换

前面我们规定:相机在世界坐标系的位置为P,坐标轴的方向向量为UVN,且UVN为单位向量。此时为了方便理解,我再次规定P为零向量,即相机坐标系的原点和世界坐标系的原点重合,如下图所示:


我们设世界坐标系中的任意一点为X(a,b,c),X点在相机坐标系中的对应的点为X’(a',b’,c’)。
根据前面推导的向量与单位向量点乘的几何意义,我们知道,点X在UVN上的投影长度为分别为X*U,X*V,X*N;即为X’在相机坐标系中,UVN坐标轴上的分量,因此有:

a‘=X*U         b‘=X*V       c’=X*N

在三维坐标变换中,为了便于进行矩阵运算,我们一般给三维坐标点增加一个额外的分量,这个额外分量一般都固定为1,那么X可写成X(a, b, c, 1),X'可写成X’(X*U, X*V, X*N, 1),此时坐标变换写成矩阵运算的形式如下:

由此得到了矩阵M,我们通过矩阵M,可以将世界坐标系下的任意坐标点与矩阵相乘,变换至相机作坐标系下。即X‘=XM,M矩阵如下所示:

3.平移变换

前面我们规定相机的位置向量P为零向量,现在我们假设P为任意向量,再来分析一下世界坐标系中的点是如何变换到到相机坐标系下的。
无论任何相机变换都可以分解成旋转和平移两大步骤。我们先假设相机坐标系和世界坐标系原点重合,先将世界坐标系中的点,通过旋转变换变换到相机坐标系,然后将相机沿着向量P(x, y, z)移动,相机坐标系中的点相对于相机沿着P’(-x, -y, -z)移动。我们发现移动之后的效果,便是我们最终所需的效果。如下图所示:


这里我们仍然假设世界坐标系中任意一点为X(a, b, c),X点在相机坐标系中对应的点为X’(a',b’,c’),X经过第一步旋转变换后的点为H(h1, h2, h3)。首先我们进行第一步的旋转变换,根据我们前面的旋转变换推导,我们有:

H=XM

接下来进行第二步的平移变换,根据数学知识,很明显有:

[h1, h2, h3]=[a-x, b-y, c-z]=X-P

虽然这样的写法很简洁,但是它无法和我们的矩阵变换统一起来,因此我们把上面的写法改成下面的矩阵形式:

此时我们得到了平移变换矩阵T,故第二步的平移变换可写成:X'=HT,矩阵T如下:

最后,再将这两步矩阵变换整理下有:X‘=HT=(XM)T=X(MT)。现在我们利用矩阵乘法,将T和M变换矩阵叠加起来,成为一个新的矩阵D


4. UVN相机模型

前面假设相机的位置向量为P(x, y, z) ,轴的方向向量为:U(Ux, Uy, Uz),N(Nx, Ny, Nz),V(Vx, Vy, Vz),其实这个就是经典的UVN相机模型,UVN相机的变换矩阵如下:


最后,上面这个矩阵大家要牢记。本篇博文希望以最简单,最通俗的语言让大家能够彻底明白相机变换是怎么回事,但是莫问能力有限,尤其是文笔。大家有什么问题可以在下面留言提问,我看到后必定一一回复。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明
菜鸟哥玩蓝牙BLE4.0系列,我想首先说明一下BLE4.0是一种低功耗的蓝牙技术,广泛应用于物联网、智能家居等领域。菜鸟哥选择玩BLE4.0系列可能有如下原因。 首先,BLE4.0具有低功耗特性。相比于传统蓝牙技术,BLE4.0在连接传输过程的电量消耗更低,这意味着设备可以更长时间地使用电池,延长使用寿命。对于菜鸟哥来说,这意味着可以更长时间地玩耍和开发蓝牙设备,更好地学习和了解这项技术。 其次,BLE4.0具有广泛的应用领域。如今,物联网技术发展迅猛,智能家居、健康监测、智能穿戴设备等应用场景普遍采用BLE4.0技术。因此,通过玩蓝牙BLE4.0系列,菜鸟哥可以了解和学习到这些领域的应用特点和开发方法,为将来的工作和研究奠定坚实基础。 此外,BLE4.0具有较高的可靠性和稳定性。该技术在传输过程采用了自适应频率跳跃和数据包检测等机制,能够自动调整工作频率和纠错,提高了数据传输的可靠性和稳定性。对于菜鸟哥来说,这意味着他在学习和开发过程可以更好地理解和应用蓝牙BLE4.0的稳定性优势,提升自己的技术水平。 综上所述,菜鸟哥选择玩蓝牙BLE4.0系列可能是因为它具有低功耗、广泛的应用领域和较高的可靠性。通过深入学习和实践,他可以更好地掌握和应用这项蓝牙技术,为未来的工作和学习打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫_问

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值