OpenGL笔记二:OpenGL 渲染流程及投影
2019-05-17 本文已影响21人
御雪飞斐
前言
期待您移步上篇:OpenGL笔记一:专业名词
OpenGL渲染架构
OpenGL 渲染流程分为两个部分:Client 和 Server。
Client:指CPU上存储的一些代码。比如:OpenGL API、C/C++。
Server:为GPU硬件部分,主要由Vertex Shader、Primitive Assembly、Fragment Shader等。
OpenGL渲染架构.jpg
OpenGL是基于C的API,因此它⾮常便携且受到⼴泛⽀持。作为C API,它与基于Objective-C的Cocoa应⽤程序⽆缝集成。 OpenGL提供应⽤程序⽤于⽣成2D或3D图像的函数。您的应⽤程序将渲染的图像呈现给屏幕或将它们复制回⾃⼰的内存。
OpenGL规范没有提供⾃⼰的窗⼝层。它依赖于OS X定义的功能来将OpenGL绘图与窗⼝系统集成。您的应⽤程序创建OS X OpenGL 渲染上下⽂并将渲染⽬标附加到其上(称为可绘制对象)。渲染上下⽂管理OpenGL状态更改和通过调⽤OpenGL API创建 的对象。
OpenGL -2.png
正投影/透视投影
正投影
正投影.png通常在2D会图中使用正投影,并在我们的几何图形中将坐标设置为(x, y, 0.0)。
把上图笛卡尔可视区域叫做视景体,视景体外的几何图形将会被裁减掉,也就是说,它将被沿着视景体的边界进行裁剪。
透视投影
透视投影.png透视投影会进行透视除法对距离观察者很远的对象进行收缩。可以理解为外部是观察者人眼(摄像机)如图所示,图中一个金子塔形被截断后的形状叫frustum(平截头体,我更愿意理解为视角金字塔)。它的观察方向是从塔的尖端到宽阔端。
代码:
//声明GLFrustum类对象
GLFrustum viewFrustum;
//GLFrustum类通过setPerspective 方法构建一个视角金字塔
viewFrustum.SetPerspective(float fFov , float fAspect ,float fNear ,float fFar)
/*
fFov:垂直方向上的视觉角度
fAspect:纵横比,水平方向的宽度与⾼度之比
fNear:近,观察者的距离
fFar:远,观察者的距离
*/
期待您移步下篇:OpenGL笔记三:固定管线着色器和基本图元