这是一篇OpenGL ES的学习笔记,介绍图像绘制里面用到的概念,学习OpenGL ES的基础知识备忘录。
OpenGLES入门教程1-Tutorial01-GLKit
OpenGLES入门教程2-Tutorial02-shader入门
OpenGLES入门教程4-Tutorial04-GLKit进阶
用3D数据生成一个2D图像的过程。
CPU擅长运算,读写内存较慢,当CPU的性能因为等待内存读写而处于次优状态时,这种次优状态就叫做数据饥饿。
1、生成(Generate),为缓存生成独一无二的标识符。
2、绑定(Bind),确定接下来运算使用的缓存。
3、缓存数据(Buffer Data),为绑定的内存分配并出示足够的内存,把CPU控制的内存数据复制到分配的内存。
4、启用或者禁止(Enable、Disable),确定在接下来的渲染是否采用缓存。
5、设置指针(Set Pointer),确定缓存中数据的类型和数据的偏移值。
6、绘图(Draw),绘制部分或者整个场景。
7、删除(Delete),删除生产的缓存并且释放资源。
缓存的生成、初始化和删除,需要耗费时间来同步图形处理器和CPU。
GPU在删除一个缓存之前必须等待缓存相关的运算结束,如果频繁生成和删除缓存,GPU没有足够时间进行渲染。
OpenGL ES 坐标是以浮点数来存储,GPU对浮点运算做了专门的优化,即使使用其他数据类型的顶点也会被转换成浮点型。
图形处理器本质上就是大规模并行矢量处理器。
接收渲染结果的缓冲区叫做帧缓存。
有两个特别的帧缓存,前帧缓存和后帧缓存,控制着屏幕像素的最终颜色。
OpenGL ES的上下文保存了OpenGL ES的状态信息,包括用于渲染数据的缓存地址和接收渲染结果的缓存地址。
每一个iOS原生控件都有一个对应的CoreAnimation层。
CoreAnimation合成器使用OpenGL ES来尽可能高效地控制GPU、混合层和切换帧缓存。
OpenGL ES会有连接到层,与层分享数据的帧缓存,至少包括一个像素颜色渲染缓存。
一个用来保存图像颜色的OpenGL ES缓存。
渲染过程中的取样可能会导致纹理被拉伸、压缩、翻转等。
帧缓存中的像素位置叫做视口坐标。视口转换的结果是所有绘制的几何图形都被拉伸以适应屏幕大小。
转换几何形状数据为帧缓存中的颜色像素,叫做点阵化(rasterizing),也叫光栅化。
每个颜色像素叫做片元(fragment)。
纹理坐标系
高细节的纹理,沿着S、T轴存储更多的纹素,减少GPU取样的数量提高渲染性能,但会增加内存。
多重纹理可以避免多通道渲染导致的内存访问限制性能情况
self.baseEffect.texture2d1.envMode = GLKTextureEnvModeDecal;
可以开启多重纹理
光线与几何图形相互作用的关键:计算出每个几何物体照射和发散出来多少光线。通过计算每个三角形与光的方向的垂直角度。
在GLKBaseEffect的灯光开启后,灯光决定了渲染的颜色;常量的颜色和顶点的颜色将被忽略。(constantColor属性仅适用于渲染单调不发光的物体)
与一个Core Animation共享内存的像素颜色渲染缓存在层调整大小时会自动调整大小。其他缓存,例如深度缓存,不会自动调整大小。
可以在layoutSubviews方法里面删除现存的深度缓存,并创建一个新的与像素颜色渲染缓存的新尺寸相匹配的深度缓存。
两个坐标系之间转换顶点坐标。
视锥体的近平面不能用z位置小于0,即使是很小的z的值也会有问题。
从近平面到远平面的距离范围会映射为深度缓存中的深度范围,当GPU计算保存在深度缓存中的值时,大幅度或者过小的近平面距离会产生数学舍入误差。
OpenGL ES使用一个叫做视域的几何图形来决定一个场景生成的片元是否会显示在最终的渲染结果中。
OpenGL ES默认为指入屏幕的负的Z坐标轴,GLKMatrixMakeFrustum() 产生一个指入屏幕的带有正的Z坐标轴的视域(view volume)。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有