• OpenGL之顶点数组、缓冲区对象、显示列表


    1.1 顶点数组

    1.1.1 通过在glBegin()与glEnd()之间放置顶点、法向、纹理坐标等数据即可绘制。

    glBegin(primitive type);
    	glVertex3f(...);
    	...
    	...
    glEnd();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.1.2 通过顶点数组把顶点颜色、坐标、法向等信息一次性传入显存,可以加快绘制效率。

    
    glVertexPointer(3,GL_FLOAT,0,coords);
    glColorPointer(4,GL_FLOAT,0,colors);
    glDrawArrays(GL_TRIANGLES,0,numVerts);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.1.3 使用Vertex Array的三个步骤:

    • 启用顶点数组,最多可达8个数组(顶点由8种属性);
    //打开开关
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    • 把数据放入数组,建立联系:创建顶点数组,把数据存入数组,并通过glVertexPointer函数与数组建立联系。
    // size :指定了每个顶点的分量数,type表示坐标的数据类型,stride:顶点数据的步长;
    void glVertexPointer(GLenum size,GLenum type,GLsizei stride,const GLvoid *pointer);
    void glColorPointer(GLenum size,GLenum type,GLsizei stride,const GLvoid *pointer);
    
    //无size,默认都为3;
    void glNormalPointer(GLenum type,GLsizei stride,const GLvoid *pointer);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 访问数组数据,绘制物体;
      访问单独的数组元素
    void glArrayElement(GLint index);
    glBegin(GL_TRIANGLES);
    	glArrayElement(2);
    	glArrayElement(3);
    	glArrayElement(5);
    glEnd();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    按顺序整体访问数组元素;

    void glDrawArrays(GLenum mode,GLint first,GLsizei count);
    
    • 1

    在这里插入图片描述

    创建一个数组元素的索引列表进行访问。

    //对于顶点数据大量重复时,可以采用这种方式,或只想采用部分数据时;
    void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices);
    
    • 1
    • 2

    1.1.4 多种属性数据可以放到一个数组中,

    对于顶点v(x,y,z)与颜色c(r,g,b,a)整合的数组data,可以采用stride来设置数据的偏移,从而绘制物体。

    glVertexPointer(3,GL_FLOAT,7*sizeof(GLfloat),&data[0]);
    glVertexPointer(4,GL_FLOAT,7*sizeof(GLfloat),&data[3]);
    
    • 1
    • 2

    1.1.5 当物体需要不停绘制的时候,每次都需要将数据传输到显存,为了避免这样,可以采用缓冲区对象。顶点数组主要用在固定流水线中。

    1.2 buffer Objec(缓冲区对象)

    当绘制物体数,将数据传入显存后数据就驻留在显存,后面绘制就不需要传输数据。主要用在shader编程中。

    1.3 Display list(显示列表方式)

    将OpenGL命令驻留在显存,固化在了流水线当中。
    在这里插入图片描述

    • 立即模式:调用一次OpenGL后立即载入显存执行;
    • 显示列表模式:调用一次OpenGL后,将面临存入一块显存空间(显示列表),最后在执行命令,主要从“命令函数”的存储和优化来提高效率。
  • 相关阅读:
    shell 基础
    Web前端开发技术课程大作业——南京旅游景点介绍网页代码html+css+javascript
    以太网 TCP协议(三次握手、四次挥手)
    LeetCode笔记:Biweekly Contest 85
    C#——文件读取Directory类详情
    同态加密简介HE
    Linux内存管理(十六):buddy系统分配器之慢速分配
    istio学习笔记-安装
    海藻酸钠-聚乙二醇-反式环辛烯|TCO-PEG-alginate|海藻酸钠-聚乙二醇-PEG-TCO
    一文带你了解CSRF、Cookie、Session和token,JWT之间的关系
  • 原文地址:https://blog.csdn.net/TxyITxs/article/details/127831194