zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    机器学习笔记-基本概念
    Java I/O工作机制
    Web请求过程
    Oracle创建表空间和增加表空间
    Oracle大数据表的分表处理
    Oracle通过PLSQL进行数据表之间的同步
    Ngnix学习笔记
    MySql基础学习-数据操作
    Image Segmentation的定义
    机器学习算法的分类
  • 原文地址:https://www.cnblogs.com/keguniang/p/9866065.html
Copyright © 2011-2022 走看看