• glDrawArrays 和 glDrawElements


     在openGL中,所有图形都是通过分解成三角形的方式进行绘制。(一个矩形分解成两个三角形进行绘制)
    glDrawArrays 和 glDrawElements 的作用都是从一个数据数组中提取数据渲染基本图元。
     一、glDrawArrays(int mode,int first,int count)
    1、mode:
    1>GL_TRIANGLES:  意味着openGL使用三个顶点来组成图形一个三角形。顶点0,1,2组成一个三角形,顶点3,4,5组成一个三角形,直到数组结束。
    2>GL_TRIANGLE_FAN:  跳过刚开始的两个顶点,然后遍历每个顶点,让openGL将这些顶点于它们前一个,以及数组的第一个顶点一起组成一个三角形。
    例如四个顶点:P2、P1、P0 ; P3、P2、P0 这2个三角形。
    3>GL_TRIANGLE_STRIP:   顺序在每三个顶点之间绘制三角形,这个方法可以保证从相同的方向上所有三角形均被绘制。以V0V1V2,V1V2V3,V2V3V4……的形式绘制三角形
    2、first
    表示从数组缓存中哪一位开始绘制,一般定义为0
    3、count
    顶点的数量
    例子如下:
    1 const GLfloat vertices[] = {
    2         -0.5f,-0.5f,0.0f,1.0f,
    3          0.5f,-0.5f,0.0f,1.0f,
    4          0.5f,0.5f,0.0f,1.0f,
    5          -0.5f,0.5f,0.0f,1.0f        
    6     };


    //绘制模型
    glDrawArrays(GL_TRIANGLE_FAN,0,4);

    二、glDrawElements

    如果代码中需要索引来渲染,采用了EBO时,则需要用glDrawElements函数来代替glDrawArrays函数,来指明我们从索引缓冲渲染

    void glDrawElements( GLenum mode, GLsizei count,GLenum type, const GLvoid *indices);

    第一个参数指定了我们绘制的模式;
    第二个参数是我们打算绘制顶点的个数;
    第三个参数是索引的类型; GL_UNSIGNED_BYTE/INT/SHORT
    第四个参数指向索引数组的指针

    注意

    1. 绑定VAO时也会自动绑定EBO
    2. 不要在解绑VAO之前解绑EBO(GL_ELEMENT_ARRAY_BUFFER),否则它就没有这个EBO配置。

    其它顺序无关,只要解绑vao在解绑ebo前边即可。

    //解绑VAO
    glBindVertexArray(0);
    //解绑EBO
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    //解绑VBO
    glBindBuffer(GL_ARRAY_BUFFER, 0);

  • 相关阅读:
    课后作业2
    软工团队项目度量反馈平台需求分析文档-北航软工暑期培训班团队项目1组
    《构建之法》教学笔记——Python中的效能分析与几个问题
    高职院校软件技术专业程序设计课程体系探索(一)
    network_node:host解决Docker容器化部署微服务出现的Dobbo通信问题
    微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查
    词频统计
    消息队列
    Linux文件扩展思考随笔
    如何在Mirth Connect中创建和调用自定义Java代码
  • 原文地址:https://www.cnblogs.com/keguniang/p/9866065.html
Copyright © 2020-2023  润新知