zoukankan      html  css  js  c++  java
  • OpenGL: VAO,VEO,EBO

    搞一大堆缓冲还是为了更好的传输数据:开显存,将顶点数据传到显存中,链接着色器程序,GPU 着色

    Vertex Buffer Object (VBO)

    一次性将大量顶点交付给渲染管线

    Vertex Array Object (VAO)

    对顶点的结构的抽象描述,标识谁是位置谁是颜色

    Index (Element) Buffer Object (EBO)

    实现顶点复用


    传入 VBO,使用 VAO

    GLuint VBO, VAO, EBO; // 缓冲对象的编号
    // 生成顶点数组与缓冲对象
    glGenVertexArrays(1, &VAO); // 顶点数组
    glGenBuffers(1, &VBO);		// 顶点缓冲
    glGenBuffers(1, &EBO);		// 索引缓冲
    
    glBindVertexArray(VAO);						// 绑定顶点数组
    glBindBuffer(GL_ARRAY_BUFFER, VBO);			// 绑定顶点缓冲
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); // 绑定索引缓冲
    
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);		 // 复制顶点数组到一个顶点缓冲中
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); // 复制我们的索引数组到一个索引缓冲中
    
    // 设定顶点属性指针(下面的 0 是位置值)
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid *)0); // 该如何解析顶点数据
    glEnableVertexAttribArray(0);													   // 激活
    
    glBindBuffer(GL_ARRAY_BUFFER, 0); // 解绑 VBO
    glBindVertexArray(0);			  // 解绑 VAO
    
    // --分割线-- 以下代码必须放在消息循环中
    
    glUseProgram(shaderProgram);						 // 激活着色器程序
    glBindVertexArray(VAO);								 // 绑定 VA0
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // 绘制
    glBindVertexArray(0);								 // 解绑 VAO
    
  • 相关阅读:
    python基础——单元测试
    python基础——调试
    python基础——错误处理
    python基础——使用元类
    python基础——多重继承
    python基础——使用@property
    sql server 2000的安装
    [转载]目前流行的缺陷管理工具
    个人工作中ssd、audio python脚本总结
    python Synchronization between processes
  • 原文地址:https://www.cnblogs.com/mollnn/p/14409219.html
Copyright © 2011-2022 走看看