iOS中 openGL常用函数记录(部分)

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

注:这行代码是用于清楚屏幕。GL_DEPTH_BUFFER_BIT 清除深度缓冲

glVertexPointer(3, GL_FLOAT, 0, triangleVertices);

注:此函数告诉OpenGL的情况下我们的数据是什么格式,它是有4个参数,这个功能是很简单细分:Size-3这个值表示了每个坐标有几个数字;Data Type- GL_FLOAT 意味着我们用float点值;Stride -  这个stride告诉OpenGL 在每个坐标之间忽略哪几个点;Pointer to the Data – 数据本身,正是因为它,三角形才会出现。

glEnableClientState(GL_VERTEX_ARRAY);

注:OpenGL是一个状态机。 这意味着你打开和关闭功能的要求就是启用和禁用命令。之前,我们使用过glEnable(),这影响到OpenGL的服务。 glEnableClientState ()开启顶点数据,GL_COLOR_ARRAY颜色,GL_TEXTURE_COORD_ARRAY 纹理

glTexCoordPointer(2, GL_SHORT, 0, squareTextureCoords);

注:告诉OpenGL我们的纹理坐标数组是在哪里存储并且格式是什么

glDisableClientState(GL_COLOR_ARRAY);

注:关闭颜色渲染

glDrawArrays(GL_TRIANGLES, 0, 3);

注:OpenGL绘制开始执行,Drawing Method-绘制方式: First Vertex- Vertex Count-顶点数量

glMatrixMode(GL_MODELVIEW);

注:glMatrixMode 告诉OpenGL,我们工作在顶点模式下,而不是投影

glLoadIdentity();

注:覆盖(重置)函数,它只是基本重置所有的条件(重置所有状态)

glTranslatef(GLfloat xtrans, GLfloat ytrans, GLfloat Ztrans);

注:glTranslatef(-1.5, 0.0, -6.0); X、Y、Z 3个方向上的平移

glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);

注:旋转,例:glRotatef(45.0, 0.0, 0.0, 1.0),绕Z轴旋转45度

glColor4f(GLfloat red,GLfloat green, GLfloat blue,GLfloat alpha);

注: glColor4f(0.0, 0.0, 0.8, 1.0);glColor4f()告诉OpenGL开始使用蓝色这个颜色来绘制(填充)。
red,green,blue这三个参数是颜色的浮点值,0.0表示没有强度,1.0表示全强度。
      
glColorPointer(4, GL_FLOAT, 0, squareColours);

注:Size-数组中颜色的数目,Data Format-我们在这里使用GL_FLOAT,Stride-再次,这里告诉OpenGL在两个值之间跳多少个数字。
Arry Points-这里是数据存储的地方。

glShadeModel(GL_FLAT);

注:着色模型:GL_FLAT&GL_SMOOTH。GL_SMOOTH是一个平滑着色,这就意味着当你开始填充一个矩形的时候,OpenGL将使用在我们 squareColours[] 数组里的默认颜色去定义在 squareVertices[] 数组里的每个顶点。 使用插值中每个像素的面积之间的点,顺利改变颜色之间的四点。换句话说,这将是我们出现彩色的矩形; GL_FLAT是使用物体的的最后一个顶点的颜色去填充整个图元

glGenTextures(1, &textures[0]);

注:GLuint textures[1];复制这个纹理数据到OpenGL引擎,所以我们要告诉OpenGL为它开辟内存空间

glBindTexture(GL_TEXTURE_2D, textures[0]);

注:激活绑定我们生成的纹理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

注:发送纹理数据(textureData 的指针)到OpenGL

  • target – 基本上,通常是 GL_TEXTURE_2D
  • level – 规定纹理的详细程度。0表示允许图片的全部细节。高数字表示n级别mipmap图片细节。(这边不懂,请知道的朋友告诉我下。)
  • internal_format – 这个 internal format 和 format 必须是相同的。这两个都是 GL_RGBA .
width - width of the image
  • height - height of the image
border – 必须始终设置为0 , OpenGL ES 不支持纹理边界.
  • format – 必须和 internal_format相同。
  • type – 每个像素的类型。想起来没,每个像素为四个字节。因此每个像素占用1个无符号整型(4字节)
  • pixels – 实际上的图片数据指针。

free(textureData);

注:释放

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);

注:告诉OpenGL,在放大的(近距离 - GL_TEXTURE_MAG_FILTER) 及缩小的(远距离 - GL_TEXTURE_MIN_FILTER). 时候如何处理,

glPushMatrix(); glPopMatrix();

注:告诉OpenGL 将我们的矩阵变换放到堆栈中,2个函数配合使用

glEnable(GL_BLEND); glDisable()

注:开启 GL_BLEND 混合色,半透明。GL_DEPTH_TEST 深度测试。GL_CULL_FACE 面剔除

glBlendFunc(GL_ONE, GL_ONE);

注: glEnable打开混合。光混合不够的,默认状态下,不会做任何事情。glBlendFunc 告诉OpenGL混合是如何工作的。

原文地址:https://www.cnblogs.com/yuxiuyi/p/10273306.html