OpenGL-专业名词解析

模型/场景对象

  • 模型或者场景对象(这两个名词是一个意思)是通过几何图元,例如点,线和三角形来构建的
  • 图元与模型的顶点(vertex)存在着各种对应关系

渲染(render)

  • 它标识计算机从模型创建最终图像的过程

图形/图像数据 => 3D空间图像

  • OpenGL是基于光栅化的系统来生成图像(会在下一篇内容有介绍)

渲染上屏/交换缓冲区(SwapBuffer)

  • 渲染缓冲区一般映射系统资源(比如将图像渲染到窗口对应渲染缓冲区,则直接可以屏幕上看到图像)
  • 每个窗口只有一个缓冲区,那就会带来一些可能的问题,比如在图像绘制过程中屏幕进行了刷新,那图像可能没办法完整显示出来
  • 为了解决上面的问题,OpenGL至少会有连个缓冲区,屏幕缓冲区和离屏缓冲区(顾名思义),这样可以通过缓冲区之间的交换来实现图像在屏幕上的显示
  • 垂直同步:刷新是逐行进行的,那为了防止交换缓冲区时屏幕屏幕上下区域属于不同的帧,交换一般会等待显示器刷新完的信号,也就是在其刷新的间隔进行交换,这个信号叫做垂直同步信号,这个技术叫做垂直同步
  • 三缓冲区技术:原理同上,只是引入该技术后可以做到,在等待垂直同步时,可以来回交替渲染两个离屏缓冲区,而在垂直同步发生时,可以在屏幕缓冲区和最近渲染完成的离屏缓冲区交换,从而最大化利用硬件性能
  • glFlush 强制刷新
  • glutSwapBuffers 交换缓冲区

管线

  • 管线的概念
    管线(pipeline),可以理解为渲染流水线。管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程的管理。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。

  • 固定管线(存储着色器)
    可以简单理解为渲染图像的这个过程,我们只能通过调用GLShaderManager类的固定管线效果实现我们一系列的着色器处理。

  • 可编程管线
    可以简单理解, 在我们处理图形的过程,我们必须使用顶点着色器片元着色器过程。我们可以采用GLSL自行编写着色器程序,来执行这个过程的事情。


着色器

着色器是OpenGL最本质的概念,理解它最好的方法是把它看做是一种小型程序,用它来编译图形处理单元(即GPU)。

  • 它是图形硬件设备执行的一类特殊函数
  • OpenGL内部包含了所有的编译器工具,可以直接从着色器代码创建GPU所需的编译代码并执行。
  • OpenGL会用到四中着色阶段(shader stage),最常用的是顶点着色器片元着色器
  • 顶点着色器
    用于处理顶点数据
  • 片元/片段/像素着色器
    用于处理光栅化的片元数据

所有的OpenGL程序都需要用到这两类着色器

着色器就是控制GPU来进行计算的
ps:Metal里面叫片元函数


GLSL(OpenGL Shading Language)

OpenGL着色语言(OpenGL Shading Language)是用来在OpenGL中着色编程的语言,也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性。比如:视图转换、投影转换等。GLSL(GL Shading Language)的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片元着色器),有时还会有Geometry Shader(几何着色器)。


纹理

纹理,英文是texture,中文可以翻译成纹理、纹理图、纹理映射等等一堆东西。不过不管翻译成啥,讲的都是一个东西。我们通常说的纹理,指的是一张二维的图片,把它像贴纸一样贴在什么东西上面,让那个东西看起来像我们贴纸所要表现的东西那样。

有关纹理的详细介绍可以参照这篇文章

用一句话来总结,纹理就是一张贴到物体上的2维图像


变换矩阵(Transformation)

图形想发生平移,缩放,旋转变换,就需要使用变换矩阵。

/ 加载单位矩阵
void m3dLoadIdentity44(M3DMatrix44f m);
// 沿着 x/y/z 轴平移
void m3dTranslationMatrix44(M3DMatrix44f m, float x, float y, float z);
// 沿着 x/y/z 轴旋转 angle(弧度)
void m3dRotationMatrix44(M3DMatrix44f m, float angle, float x, float y, float z);
// 在 x/y/z 轴上进行缩放
void m3dScaleMatrix44(M3DMatrix44f m, float xScale, float yScale, float zScale);
// 矩阵 a 和矩阵 b 相乘得到矩阵 product
void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a, const  M3DMatrix44f b);

投影矩阵(Projection)

用于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下绘制

  • 设置投影矩阵是通过视景体(GLFrustum)来设置的
[GLFrustum] { // 仅仅表示以下方法是 GLFrustum 的方法
    // 设置正投影矩阵参数,(x, y, z)最小和最大值
    void SetOrthographic(GLfloat xMin, GLfloat xMax, 
                         GLfloat yMin, GLfloat yMax, 
                         GLfloat zMin, GLfloat zMax);
    // 设置透视投影矩阵参数,分别为:透视角,宽高比,近距,远距
    void SetPerspective(float fFov, float fAspect, float fNear, float fFar);
    // 获取投影矩阵
    const M3DMatrix44f& GetProjectionMatrix(void);
}
  • 为了方便管理各个矩阵,GLTools 提供了矩阵堆栈 GLMatrixStack,默认堆栈最大深度为 64,有压栈、出栈等操作。
[GLMatrixStack] { // 仅仅表示以下方法是 GLMatrixStack 的方法
    // -------- 矩阵加载 -----------
    // 在栈顶载入单元矩阵,载入即覆盖
    void LoadIdentity(void);
    // 在栈顶载入任何矩阵
    void LoadMatrix(const M3DMatrix44f m);
    // 用栈顶矩阵乘以某个矩阵,得到的结果矩阵覆盖原来的栈顶矩阵
    void MultMatrix(const M3DMatrix44f mMatrix);
    // 获取栈顶矩阵
    const M3DMatrix44f& GetMatrix(void);
    // -------- 出栈压栈 -----------
    // 压栈,在栈顶压入一个矩阵
    void PushMatrix(const M3DMatrix44f mMatrix);
    // 出栈,把栈顶矩阵移除矩阵堆栈
    void PopMatrix(void);
    // -------- 仿射变换 -----------
    // 栈顶矩阵进行缩放变换
    void Scale(GLfloat x, GLfloat y, GLfloat z);
    // 栈顶矩阵进行平移变换
    void Translate(GLfloat x, GLfloat y, GLfloat z);
    // 栈顶矩阵进行旋转变换
    void Rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
}

有关像素

像素(pixel)是显示器上最小的可见单元。

  • 计算机系统将所有的像素保存到帧缓存(framebuffer)
  • 帧缓存
    它是由图形硬件设备管理的一块独立内存区域,可以直接映射到最终的显示设备上。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,825评论 6 546
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,814评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,980评论 0 384
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 64,064评论 1 319
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,779评论 6 414
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,109评论 1 330
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,099评论 3 450
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,287评论 0 291
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,799评论 1 338
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,515评论 3 361
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,750评论 1 375
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,221评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,933评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,327评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,667评论 1 296
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,492评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,703评论 2 380

推荐阅读更多精彩内容