OpenGL 几何知识
作者:互联网
一 、引言
为什么要学习几何相关知识?因为在OpenGL中所有可视对象都是2D/3D几何图形,对几何图形的移动/缩放/旋转;拉伸/扭曲等;图形从一个场景转换到另一个场景中,都需要借助向量和矩阵的运算。
二 、坐标系以及变换
事实上,我们所谓的3D在显示屏上并非真正的3D,因为我们的显示屏都是2D的,所以,在计算机内部创建的3D图形都会投影到2D屏幕中,在此期间,就会涉及到坐标系变换。应用程序设置的顶点坐标,经过一系列场景变换后(一般在顶点坐标系完成),得到标准的设备坐标【-1.0,1.0】,然后送入光栅化器,最终得到屏幕的2D坐标点(像素点)。光栅化OpenGL无法控制,故这里我们只讨论场景变换。
从用户顶点坐标到屏幕坐标一般会设计以下五个坐标空间。
- 局部空间(Local Space,或者称为物体空间(Object Space))
- 世界空间(World Space)
- 观察空间(View Space,或者称为视觉空间(Eye Space))
- 裁剪空间(Clip Space)
- 屏幕空间(Screen Space)
借用LearnOpenGL中的图说明一下:
1.局部空间中的物体的位置都是局部原点,大小针对物体本身。
2.局部坐标通过模型变换矩阵,转到世界坐标空间。世界空间中,所有物体的坐标原点都相同,都是世界坐标系原点。
3.世界坐标通过视图变换矩阵转移到观察空间。世界空间中包含所有物体,观察者的远近和方向共同决定视口中的画面。
4.观察空间中的点通过投影变换矩阵转移到裁剪空间,投影变换会创建一个平截头体(观察箱),观察箱内的坐标会被映射到标准化设备坐标系中。在裁剪空间中,坐标点都位于[-1.0,1.0]之间,超出范围的点将会被裁剪掉。之所以做投影变换,因为在欧式空间中,成像的结果和人眼成像不一致,比如,两条平行直线在传统的欧式空间中永远不相交(有种说法是相较于无穷远处)。但是,在投影空间中,两条平行直线会相交。在投影空间中,成像的结果和人眼成像基本一致。当然,投影变换除了透视投影,还有正投影(平行投影)
5.裁剪空间中的坐标通过视口变换。
三、向量
- 什么是向量
- 向量的提出
- 向量的运算
- 运算的物理意义和几何意义
四、矩阵
五、齐次坐标
六、平移旋转缩放
七、变换
1.线性变换和非线性变换
线性空间中的变换:
正交变换
酉变换(幺正变换)
相似变换
几何中的变换:
保角变换
仿射变换
射影变换 (平行投影和透视投影)
拓扑变换
七、三维旋转
1.欧拉角
2.四元数
标签:裁剪,OpenGL,变换,知识,投影变换,Space,坐标,几何,空间 来源: https://blog.csdn.net/GengWenhui123/article/details/114707338