zoukankan      html  css  js  c++  java
  • 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混合是如何工作的。

  • 相关阅读:
    <dependency>
    json、javaBean、xml互转的几种工具介绍
    日志系统logBack的配置以及sdoutAppender控制台输出
    Java中Main函数探讨
    java的Daemon守护线程
    FastJson序列化对象
    多线程情况下获取数据出现的不一致
    苏州地区--校招IT公司
    Spark聚合操作:combineByKey()
    Hadoop初步简介
  • 原文地址:https://www.cnblogs.com/yuxiuyi/p/10273306.html
Copyright © 2011-2022 走看看