美文网首页
2022-10-29 齐次坐标与透视

2022-10-29 齐次坐标与透视

作者: MrSwilder | 来源:发表于2022-10-29 18:33 被阅读0次

    一、齐次坐标

    问题:两条平行线可以相交?
    在欧氏空间(几何学)中,同一平面上的两条平行线不能相交,或者说不能永远相交。这是一个大家都熟悉的常识。

    但是,在投影空间中就不一样了,比如,下图上的火车铁路在远离眼睛的时候会变得更窄。最后,两条平行的铁轨在地平线处相交,也就是无限远处的一点。


    image.png

    欧氏空间(或笛卡尔空间)能很好地描述我们的2D/3D几何,但它们不足以处理投影空间(实际上,欧氏几何是投影几何的一个子集(w=1))。一个2D点的笛卡尔坐标可以表示为(x,y)。

    如果这个点远去到无穷远呢?无穷远处的点在欧氏空间中无法具体展示。在投影空间中,平行线会在无穷远处相遇,但在欧氏空间中却做不到。

    那么数学家如何用数学的方法来描述这个问题呢?

    解决方案: 齐次坐标

    由 August Ferdinand Möbius(不错,就是那个莫比乌斯圈的那位) 提出的齐次坐标,使图形和几何学的计算在投影空间中成为可能。齐次坐标是用N+1个数来表示N维坐标的一种方式。

    要制作二维齐次坐标,我们只需在现有坐标中增加一个额外的变量w。因此,笛卡尔坐标中的一点,(X,Y)在齐次坐标中就变成了(x,y,w)。而笛卡儿坐标中的X和Y在齐次坐标中的x、y和w则重新表达为

    X = x/w
    Y = y/w

    为什么叫 “齐次”呢?

    如前所述,为了将齐次坐标(x,y,w)转换为笛卡尔坐标,我们只需将x和y除以w即可。


    image.png

    将Homogeneous转换为Cartesian,我们可以发现一个重要的事实。让我们看看下面的例子。


    image.png

    如你所见 (1, 2, 3), (2, 4, 6)和(4, 8, 12)这三个点对应于同一个欧氏点(1/3, 2/3). 而任何乘以a的数(1a,2a,3a)与欧氏空间中的(1/3,2/3)是同一个点。因此,这些点是 “homogeneous/齐次 “的,因为它们在欧氏空间(或笛卡尔空间)中代表同一个点。换句话说,齐次坐标是与乘数a不相关的。


    image.png

    二、透视投影矩阵推导

    通过第一节的描述,我们可以得出下述结论:
    (x,y,z,1)与(ax,ay,az,a)代表的点在三维笛卡尔空间的是一致的,即(x,y,z)

    即在顶点着色器中

    vec4 clip_Position=u_MvpMatrix*a_Position;
    gl_Position=clip_Position;
    

    替换为:

    vec4 clip_Position=u_MvpMatrix*a_Position;
    gl_Position=vec4(clip_Position.x/clip_Position.w,clip_Position.y/clip_Position.w,clip_Position.z/clip_Position.w,1.0);
    

    效果是完全一样的!

    有了这个前提,现在开始透视投影矩阵的推导,首先上一张图片:

    image.png

    透视投影转化为设备坐标可以分为两个过程
    1)所观察的物体在一个半截面的方锥形中,设坐标为P,将P投影到近截面上,坐标为P’,保留z值;如下图:


    image.png

    推导P'很简单,就是几何概念相似三角形,推导过程如下图:

    image.png

    2)P’归一化到一个长宽高都为1的立方体中,这个立方体位置在摄像机位置处


    image.png

    推导P'’的过程如下:

    首先先明确一个概念:近截面的长为W,宽为H,那么近截面的X轴正方向坐标的最大坐标(H/2, 0),归一化到正方体上的坐标是(1,0),同理负坐标(-H/2, 0)对应到(-1,0),同理Y轴正方向(0, W/2)归一化到(0,1),Y轴负方向(0, -W/2)归一化到(0,-1)。
    又因为P''和P'的坐标关系是线性关系:


    image.png

    image.png

    由此可得:

    image.png

    然后令:θ=fov/2

    image.png

    同理可得:


    image.png

    设透视投影矩阵为:


    image.png

    利用齐次坐标变换

    image.png

    将系数代入矩阵,即为:


    image.png

    上述继续推导


    image.png

    最后得出矩阵


    image.png

    相关文章

      网友评论

          本文标题:2022-10-29 齐次坐标与透视

          本文链接:https://www.haomeiwen.com/subject/htzqtdtx.html