[OpenGL]OpenGL几何变换的秘密--万变不离其宗

1.变换的步骤(万变不离其宗)

我们先来看图形流水线,图形的几何变换都是在顶点处理阶段进行变换,主要包括四个步骤:几何变换 ->投影变换->裁减->视口变换
在这里插入图片描述
具体的流程可以来看下(见下图):
①首先我们的视点所能看到的东西会处于一个视椎体中(详情可查看OpenGL基础知识一文),比近平面还近的和比远平面还远的,我们都默认看不到
②当一个红色的三角形处于视椎体中,投影到投影平面上,
③我们的电脑屏幕上会打开一个窗口,窗口所能看到的就是我们的投影窗口,即视口,超过视口的部分会被裁减
实际上在做操作的时候是先裁减,才将图形变成屏幕上我们看到的样子(个人猜想:是为了不受设备所影响,所以先把该处理的都在模拟的空间里先提前处理,欢迎评论提出意见看法原因)
在这里插入图片描述

2.三种几何变化

①平移(glTranslate)

老规矩,上图,平移:把各个顶点移到其他位置
在这里插入图片描述
把P(x,y,z)点移到P’(x’,y’,z’),正常我们把平移写成矩阵形式为左边矩阵表达式,但是多了一个加法,所以我们变成了4维齐次矩阵,也就是右边的形式
在这里插入图片描述

②放缩(glScale)

放缩实际上就是在原顶点座标的基础上进行放大或者缩小
在这里插入图片描述

敲黑板!!!!!!!
我们可以注意到,我们是以原点进行放缩,所以三角形的位置会偏移,那很多人会说我们怎么在原地放缩?
我们可以采用组合的方式来进行放缩,先将三角形平移到原点,再放缩,然后再按照相同距离平移回去

在这里插入图片描述

③旋转(glRotate)

在这里插入图片描述
现在有人会问,如果想绕任意方向的旋转轴旋转怎么办?
我们以要确定的旋转轴为z轴重新构建座标系,计算顶点在新的座标系中的座标,绕z轴旋转,然后再变回原座标系
在这里插入图片描述

延伸

为什么要把各种变换表示成矩阵运算?
连续变换的矩阵可以组合成一个矩阵,变换的组合就是矩阵相乘
例如,一个放缩矩阵为A,一个旋转矩阵为B,我们对(x,y,z)进行变换,既为左下角的矩阵示意图,当我们先将A和B相乘,即M = BA,在对(x,y,z)进行操作,可以提高计算效率。。
当我们有10000个点需要操作的时候,如果按照原来的方式,我们需要操作20000次,但是当我们先计算复合矩阵,这个操作只需要10001次
在这里插入图片描述
图形硬件适合运算矩阵向量(个人猜想,欢迎指出错误)

3.几何变换应用

在OpenGL里面,所有的变化都是矩阵的计算
例如,当我们先进行平移操作T1,再进行旋转操作T2,实际上就是先算出两个变化的复合矩阵,再对点进行操作
在这里插入图片描述
①先介绍一个函数glLoadIdentity,此函数作用是单位矩阵,当我们进行变换的时候可以将当前模型变换矩阵先变成单位矩阵,再计算变化矩阵,再对图元进行操作,图元的定义可见OpenGL基本语法
在这里插入图片描述
②当我们想对不同的图元进行不同的操作时,我们可以先操作p1,然后再操作p2
(注意,每次操作完某个图元,要对其他图元进行操作时,要重新置当前模型矩阵为单位矩阵)
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章