Part I 空气曲棍球 Chapter5(5.4 Defining an Orthographic Projection)

5.4 定义正侧投影(Defining an Orthographic Projection)

    我们使用包android.opengl 下面的Matrix类定义一个正侧投影,在Matrix中有一个方法orthoM()将会为我们生存一个正侧投影矩阵,在这里我们将会使用这个投影来改变坐标空间,正如我们将会看到的,一个正侧投影矩阵与平移矩阵非常像。
   下面来仔细看看orthoM()的方法参数:
orthoM(float[] m, int mOffset, float left, float right, float bottom, float top, float near, float far)

float[] m目标矩阵数组--为了能存储正交投影矩阵这个数组的长度至少应该是16.
int mOffsetm数组中从哪个位置开始写入生存的矩阵数据
float left最小的x坐标
float right最大的x坐标
float bottom最小的y坐标
float top最大的y坐标
float near最小的z坐标
float far最大的z坐标

    当我们调用这个方法的时候,将会生存如下投影矩阵:

\begin{bmatrix} \frac{2}{right-left}& 0& 0& -\frac{right+left}{right-left} \\ 0& \frac{2}{top-bottom} & 0& -\frac{top+bottom}{top-bottom} \\ 0& 0& -\frac{2}{far-near}& -\frac{far+near}{far-near}\\ 0& 0& 0& 1 \end{bmatrix}
    不要被矩阵里面的参数吓倒了,其实它就是一个平移矩阵。这个投影矩阵将会把位于left/right、bottom/top、near/far中的坐标映射到规范化设备坐标系中的[-1,+1],所有在这个区间中的事物将会得到显示。
    最大的区别是z轴有一个负号,这将会反转z坐标。这意味着物体越远,z坐标将会越小;为什么这样呢?这个原因主要是历史及习惯。
 

5.4.1 左手坐标系及右手坐标系(Left-Handed and Right-Handed Coordinate Systems)


    要更好的理解z轴问题,我们需要理解左手坐标系及右手坐标系;如何判断一个坐标系是哪个坐标系呢?拿出你的一只手,让大拇指指向x轴正向,食指指向y轴正向。
    现在用你的中指指向z轴正向;如果你可以使用左手做到这个动作,则说明这是一个左手坐标系,如果你可以使用右手做到这个动作,则说明你使用的是右手坐标系。
    如下图1是一个左手坐标系、图2是一个右手坐标系:
    

图 1(左手坐标系)
图 2(右手坐标系)

    选择左手坐标系或者右手坐标系并不是一个关键的问题,只是一个简单的转换。虽然在早期版本的OpenGL中规范化设备坐标使用左手坐标系,但是默认的坐标系还是右手坐标系(物体越远Z轴越小),这就是为什么Android的Matrix类默认会产生一个反转的z轴坐标。
    假如你想不仅仅是在规范化设备坐标系中使用左手坐标系,那你只需要不反转z轴(orthoM())就可以了。
    现在我们已经对矩阵运算一个基本的概念,下一节我们将会在项目中增加正侧投影。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值