OpengGL ES系列笔记三

深度渲染缓存

深度缓存是一个可选的输出缓存,并且与像素颜色渲染缓存相似,几乎所有的OpenGL ES都使用深度缓存,以为几乎所有的OpenGL ES应用都使用坐标系变换来改变渲染的视点。在大部分的情况下,一个深度缓存会消除对于三角形、线段、和点进行排序的需求。深度缓存的使用为GPU提供了一个用来保存计算出的深度的地方。之后这个缓存又被GPU利用来控制在像素颜色渲染缓存中的片元的置换。(因为在渲染片元的时候,会计算出片元的深度,如果深度小于深度缓存的深度,那么这个片元就用来代替在像素颜色渲染缓存中得那个片元位置的任何颜色,并且把计算出来的片元深度替代深度缓存里的深度。如果计算出来的片元深度更大,那么这个片元不会被渲染,依旧使用像素颜色渲染缓存里的片元)

GLKit与深度缓存



变换矩阵


GLKit的GLKMatrix4MakeScale()函数创建了一个基础的变换矩阵,三个参数指定了xyz轴的相对单位长度,1.0f表示没有变化,aspectRatio表示单位长度变为这个值

基本变换

只存在四种基本变换:平移、旋转、缩放、透视。基本变换联合决定了一个新坐标系中得每一个顶点位置是怎样转换为参考坐标系中的一个位置的。

单位矩阵

定义一个与参考坐标系相同的坐标系的矩阵叫做单位矩阵。任意矩阵的级联操作中产生一个新的矩阵,这个新矩阵包含两个矩阵的所有变换。解析:一个矩阵A通过简单变换例如是平移,会产生一个平移矩阵,但是这个平移矩阵并是不最终的矩阵,要把A与这个平移矩阵进行级联产生新的A矩阵,这个A矩阵就是新的当前矩阵了。


矩阵平移:

通过相对于参考坐标系的原点移动新坐标系的原点,平移定义了一个新的坐标系(注意记住平移原点就好了),平移不会影响新坐标轴相对于参考坐标系的长度和方向。

GLKit简化了坐标的平移,提供了GLKMatrix4MakeTranslation(float tx,float ty,float tz)通过平移一个单位矩阵返回一个和定义了坐标系的新矩阵(平移矩阵)。tx/ty/tz分表表示新坐标系的原点距离原坐标系的原点在各个轴上移动的距离。函数GLKMatrix4Translate(GLKMatrix4 matrix,float x,float y,float z)返回参数矩阵(原坐标矩阵)(x,y,z)与GLKMatrix4MakeTranslation()产生的 一个级联。

平移坐标轴



平移矩阵生成


矩阵平移的过程分解


旋转

旋转是通过相对参考坐标系坐标轴的方向旋转新坐标系的坐标轴来定义一个新的坐标系,旋转的坐标系与参考坐标系使用同一个原点,且坐标轴长度不会变化,变的只是坐标轴的方向。GLKit简化旋转过程,提供GLKMatrix4makeRotation(float angleRadians,float rx,float ry, float rz)函数生成一个旋转坐标矩阵。通过GLKMatrix4Rotate(GLKMatrix4 matrix,float angleRadians, float x , float y, float z)函数通过旋转座位一个参数传入的矩阵返回一个定义了一个坐标系的新矩阵

坐标轴旋转

缩放

缩放是通过相对于参考坐标系的坐标轴的单位长度改变新坐标系的坐标轴的单位长度来定义一个新坐标系,缩放的坐标系与参坐标系的原点、方向一般不会改变,除非通过一个负值进行缩放会改变方向。同样,GLKit提供了GLKmatri4MakeScale(float x,float y,float z)函数通过扩大或者缩小一个单位矩阵的任意坐标轴的单位长度来返回一个定义了坐标系的矩阵。

矩阵缩放的分解过程

projectionMatrix 和 modelviewMatrix

GLKBaseEffect的trnsform属性支持常见的三个不同矩阵-projectionMatrix 和modelviewMatrix和textureMatrix。GLKBaseEffect会级联modelviewMatrix和projectionMatrix以产生一个mdelviewPaojectionMatrix矩阵,这个矩阵会把顶点完全地变换到OpenGL ES默认坐标系中。默认坐标系直接映射到像素颜色渲染缓冲的片元中。

GLKMatrixStack

GLKMatrixStack是GLKit提供的一个堆栈,用于存放4x4矩阵的,GLKMatrixStackPush函数会复制最顶部的矩阵到堆栈的顶部,GLKMatrixStackGetMatrix4()会返回最顶部的矩阵,GLKMatrixStackPop函数会移除堆栈最顶部的项,并把前一个顶部矩阵恢复到最顶部。应用会推入一个新矩阵到堆栈顶部,操作并使用它在OPengl ES中渲染几个图像,然后把它弹出堆栈并把上一个矩阵恢复到顶部。


textureMatrix

纹理矩阵,S和T坐标系的纹理与顶点的U和V坐标之间会有一个映射的过程,纹理矩阵的作用几时 在这个映射的过程添加转换。

textureMatrix2d0:用于使用多重纹理时第一个纹理的纹理坐标的变换。

textureMatrix2d1:用于保存使用多重纹理时第二个纹理的纹理坐标的矩阵。

透视和平截头体

OpenGL ES使用一个叫做视域的几何图形来决定一个场景生成的哪些片元将会显示在最终的渲染结果中,处于视域范围的将被显示,其余的被抛弃。视域有时也会被称为投影,一个立方体或者矩形视域叫做一个正射投影。利用一个正射投影对于视点距离没有影响。GLKit的GLKMatrix4MakeOrtho(GLFloat left,GLFloat right,GLFloat bottom,GLFloat top,GLFloat near,GLFloat far)函数会返回一个矩阵,这个矩阵定义了一个由left,right,bottom,top,near,far界定的视域。GLKMatrixMakeOrtho函数返回的矩阵通常与当前projectionMatrix级联来定义视域。

当使用透视投影时,视域将不再是矩形,而是角锥体去了头部的平截头体,当投影到2D颜色渲染缓存中后,距离视点越远的对象越小,但是接近视点的对象仍然很大。GLKit的GLKMatrixMakeFrustrum()函数将创建一个包含透视的新变换矩阵。这个新矩阵通常会与当前projectionMatrix级联来定义视域。

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

推荐阅读更多精彩内容