OpenGL名词熟悉
一:着色器.函数/方法(代码段)->CPU来使用.shader(代码段)->GPU
二:固定着色器:苹果提供Api(代码段)->调用(参数)OpenGL来提供
三:自定义着色器.自己基于GLSL语法来进行编写代码段
四:顶点着色器:用来处理顶点相关代码.1确定位置.2.缩放/平移/旋转.3手机端显示3D效果.
手机屏幕实际是2D.我们将3D转换成2D(投影换算)
五.片元着色器/像素着色器:片元(像素)处理一个个像素点.eg:120*120像素点.处理14400次.针对GPU来说不算多.因为GPU是并行运算的.
拓展一下:图片进行饱和度调整.实际就是给每一个片元点修改对应的色值
六.GLSL:自定义着色器.代码OpenGL标准调用GPU来计算
七.光栅化:2个过程(不可编程).第一个是确定图形像素范围.第二个过程:颜色附着上去
八.纹理:压缩图片->位图OpenGL.tga纹理文件.在移动端显示一张png/jpg均是转换成位图以后进行展示
九.混合:Layer.多个图层叠加.叠加部分会重新计算.如果有透明度.那么就会产生离屏渲染
十.变换矩阵:线性代数.就是旋转/平移/缩放
十一.投影矩阵:就是将3D投影到2D设备上
投影方式:
A.正投影(平行投影):不管远近.都是1:1.camera不是相机是观察者.用户显示2D效果.不是针对3D透视
B透视投影.远小近大.针对3D透视
OpenGL摄像机坐标系.就是观察者坐标系.从哪个角度观察.就会呈现不一样的视图
OpenGL着色器相关
OpenGL图元连接相关
OpenGL纹理学习
纹理是一种图形数据.主要用于在屏幕中给OpenGL显示物体贴上图形数据.就像装修时家里的墙上贴墙纸
纹理常用的API主要有三个
a.分配纹理对象
//参数1.待使用的纹理个数
//参数2.待使用的纹理数组
GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures);
b.读取纹理.
//参数1.纹理文件名称
//参数2.纹理的宽变量地址
//参数3.纹理的高变量地址
//参数4.组件格式变量地址(获取纹理单元存储的颜色成分)
//参数5.文件格式变量地址
//返回值GLbyte *
:指向图像数据的指针
GLbyte *gltReadTGABits(const char *szFileName, GLint *iWidth, GLint *iHeight, GLint *iComponents, GLenum *eFormat, GLbyte *pData = NULL);
c.载入纹理
//参数1.纹理维度.GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D
//参数2.mip贴图层次.一般使用0
//参数3.纹理单元存储的颜色成分.
//参数4.纹理的宽度
//参数5.纹理的高度
//参数6.纹理的深度.一般使用0
//参数7.像素数据的数据类型.GL_UNSIGNED_BYTE无符号整型
//参数8.指向纹理图像数据的指针
GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
d.绑定纹理
//参数1.纹理维度GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D
//参数2.需要绑定的纹理
GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture);
一般我们在绑定纹理时会设置纹理参数.包含:
1.过滤方式:常用的有临近过滤(GL_NEAREST
).线性过滤(GL_LINEAR
).效果如下:
过滤方式还有Mip贴图纹理过滤
2.环绕方式:即当纹理不满足填充空间时.需要使用什么样的环绕方式填充
纹理设置方式:
//参数1.纹理纬度
//参数2.纹理设置类型
//参数3.类型对象的效果
GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
//纹理放大时.使用线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//纹理缩小时.使用临近过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//x轴使用重复环绕
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
//y轴使用拉伸填充环绕
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
OpenGL纹理映射方式:
这里值得注意的是.在OpenGL中.每个单元都是一个三角形.即便是四边形也是2个三角形组装起来.所以对于绘制四边形.可以让共用的对角点写在中间.这样就能实现两点共用.绘制出四边形