OpenGL 学习日志 002

OpenGL 学习日志 002

基础图形管线

客户机-服务器

客户端是存储在CPU寄存器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行,驱动程序将渲染命令与数据结合起来!
,并发送到服务器上来执行,在一台典型的桌面计算机上,服务器会跨越一些系统总线,实际上,他就是图形加速卡上的硬件和内存 ,服务器和客户机在功能上是异步的,他们有各自独立的硬件和软件,为了获得更佳的性能,我们希望他们两个都尽可能的工作,客户机不断的将数据块和命令组合在一起并送入缓冲区,然后缓冲区会将这些数据发送到服务器执行,服务器执行缓冲区的内容,于此同时,客户机又发送了一次数据,如果服务器停止工作等待客户机,或者客户机停止工作来等待服务器接受更多命令和数据准备,我们就把这种情况称之为管线停滞,管线停滞是注重性能的程序猿的噩梦,我们真的不希望CPU和GPU闲置

---- 此段内容摘抄原文

着色器
16070682275515.jpg

可以看出图形管线包含很多部分:先接受一组3D坐标,然后经过图元装配 -- 几何着色器 -- 光栅化 -- 片段着色器 -- 最后测试混合才转变为你屏幕上的有色2D像素输出。图形渲染管线的每个阶段将会把前一个阶段的输出作为这个阶段的输入。所有这些阶段都是高度专门化的(它们都有一个特定的函数),并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每一个(渲染管线)阶段运行各自的小程序,从而在图形渲染管线中快速处理你的数据。这些小程序叫做着色器(Shader)。
注意上图中的蓝色阶段代表我们可以注入自定义的着色器,这就允许我们用自己写的着色器来替换默认的。这样我们就可以更细致地控制图形渲染管线中的特定部分了,而且因为它们运行在GPU上,所以它们可以给我们节约宝贵的CPU时间。

图形管线非常复杂,它包含很多可配置的部分。然而,对于大多数场合,我们只需要配置顶点和片段着色器就行了。几何着色器是可选的,通常使用它默认的着色器就行了。

投影

正投影

我们通常在2D的绘制中使用正投影,可理解为一个物体的正视图,我们始终看到一个物体的一个面(或者多个面组成的一个面,假如一个圆锥,我们从上往下看,他就是一个圆形)

透视投影

远小近大 是我对透视投影最直观的理解,书上介绍了一个金字塔截断的图。

16070687891701.jpg

在OepnGL中,可通过GLFrustun 类通过调用 SetPersPective 方法为我们构建一个平截头体

点和线

图元 描述
GL_POINTS 每个顶点在屏幕上都是一个单独的点
GL_LINES 每2个点定义了一个线段
GL_LINE_STRIP 从第一个顶点依次经过每个后续的顶点绘制的线条
GL_LINE_LOOP 与上个唯一的不同是,最后一个顶点也和第一个顶点连接起来
GL_TRIANGLE 每三个点定义了一个新的三角形
GL_TRIANGLE_STRIP 公用一个带(strip)上的顶点的一组三角形
GL_TRIANGLE_FAN 以一个原点为中心呈扇形排列,公用相邻顶点的一组三角形

点是最简单的图元,每个特定的顶点在屏幕上都仅仅是一个单独的点。默认情况下一个点为一个像素,但是我们可通过glpointSize 来改变其默认大小。

void glpointSize(GlFloat size);

这个size 并不是所有大小都可以支持的,或者说是 有效参数,使用下面的函数可获取支持的小大范围

GLFloat sizes[2];//最小值和最大值
GLFloat step; //最小步长的保存值
glGetFloatv (GL_POINT_SIZE_RANGE,Sizes);
glGetFloatv (GL_POINT_SIZE_GRANUKARITY,&step);

点不会近大远小,不受透视视图的影响。

线

比点更进一步的是独立的线段。一条线段是在两个顶点之间绘制的,所以第一批线段应该摆阔偶数个顶点,每两个顶点都是线段的终点,默认情况下,线段的宽度为一个像素,改变线段的宽度的唯一方式是使用glLineWidth来设置

void glLineWidth(GLfloat width);
线带

线带(lineStrip)连续的从一个顶点到下一个顶点绘制线段,以形成一个真正连接点的线条,每个链接顶点都会被选定2次,其中一次是作为一条线段的终点,另一次则是作为下一条线段的起点,移动所有这些额外的数据并对同一个点进行两次转换,对于GPU的带宽和时钟来说都是一种浪费,在此显示同一组的点,这次是作为 GL_Line_STRIP 绘制的。

线环

线环(Line Loop)是线带的一种扩展,在线带的基础上增加了一条 从第一个点连接最后一个点的线。形成了一个闭环。

环绕

OpenGL 认为 具有逆时针方向环绕的多边形是正面的,如果想改变OpenGL 这个默认行为,可以使用下面的函数

glFrontFace(GL_CW);

GL_CW参数告诉OpenGL顺时针环绕的多边形将被认为是正面的。
GL_CCW这个参数告诉OpenGL你是真环绕的多边形为正面,

三角形带
16070745266464.jpg

使用三角形带而不是分贝指定每个三角形,这样做有两个优点,

  1. 用前3个顶点指定的第一个三角形后,对于接下里啊的每个三角形,只需要再制定一个顶点,绘制大量三角形的时候,采用这种做法可以节省大量的程序代码和数据存储空间。
  2. 提高运算性能节省带宽

三角形扇

还可以使用GL_TRIANGLE_FAN 创建一组围绕一个中心点的相连的三角形。


16070745493881.jpg

一个简单的批次容器

GLtloos 包含一个简单的容器类 **GBatch** 他知道使用GLshaderManager 支持的任意存储着色器时如果对图元进行渲染的。使用 **GBatch** 也非常简单。首先对批次进行初始化,告诉这个类代表那种图元,包括其中的顶点数。以及一组或者两组纹理坐标。

书本第73页 未完待续。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容