3D 投影矩阵学习1

先看一下名词;
在矩阵数学中,也有一个名词叫投影矩阵,其定义为:
    若矩阵A既是对称矩阵,又是幂等矩阵,则称A为投影矩阵。

这里说的是3D世界中的投影矩阵;其作用是帮助把3D物体显示在2维计算机平面。

什么是投影
    计算机显示器是一个二维表面,所以如果你想显示三维图像,你需要一种方法把3D几何体转换成一种可作为二维图像渲染的形式。这就是投影做的。
    最简单情形,把3D对象投影到2D表面的方法是简单的把每个坐标点的z坐标丢弃。这过于简单,并且在大多数情况下不是有用。

    在OpenGL或者DirectX中,在3D摄像机空间中的点需要映射到视锥体近裁剪面上(也就是投影面)才能在屏幕上看到。

    投影公式将变换你的几何体到一个新的空间体中,称为规范视域体(canonical view volume),规范视域体的精确坐标可能在不同的图形API之间互不相同,作为讨论,把它认为是从(-1, -1, 0)延伸至(1, 1, 1)的盒子,这也是Direct3D中使用的。
    一旦所有顶点被映射到规范视域体,只有它们的x和y坐标被用于映射到屏幕上。这并不代表z坐标是无用的,它通常被深度缓冲用于可见度测试。这就是为什么变换到一个新的空间体中,而不是投影到一个平面上。

    左手坐标系,摄像机俯视z轴正方向,y轴朝上并且x轴朝右。这是Direct3D中使用的坐标系。下面使用此坐标系。对于右手坐标系系统来说,在计算方面没有明显差异,在规范视域体方面有一点区别。

    投影方法,最常见的2种:正交和透视。

正交投影(Orthographic Projection)
    正交投影,之所以这么称呼是因为所有的投影线都与最终的绘图表面垂直,是一种相对简单的投影技术。
    视域体,也就是包含所有你想显示的几何体的可视空间——是一个将被变换到规范视域体的轴对齐盒子;

    Direct3D提供了D3DXMatrixOrthoOffCenterLH()()方法构造一个正交投影矩阵;方法名中的"LH"代表了你正在使用左手坐标系。

    正交投影矩阵有一个简化形式。考虑几点: 首先,在可见空间中,摄像机定位在原点并且沿着z轴方向观看。第二,你通常希望你的视野在左右方向上延伸的同样远,并且在z轴的上下方向上也延伸的同样远。如果是这样的情况,那么z轴正好直接穿过你视域体的的中心,所以得到了r = -l并且t = -b。换句话说,你可以把r, l, t和b一起忘掉,简单的把视域体定义为1个宽度w和1个高度h,以及裁剪面f和n。这样将得到简化的版本:
     
    Direct3D中D3DXMatrixOrthoLH()方法实现简单版本。

透视投影(Perspective Projection)
    透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。
    从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子。
    Direct3D的D3DXMatrixPerspectiveOffCenterLH()方法实现了透视投影公式。
    Direct3D的D3DXMatrixPerspectiveLH()方法生成简化版本的矩阵。

 

看如下图,正交和透视投影的示意;

一个是直线(右边),一个是斜线;透视投影更真实些;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值