• 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
    
  • 相关阅读:
    and &&区别
    redis服务意外停止
    shell基础之bash
    vbox的桥接网络
    apache安装及相应配置
    https服务器配置部署
    nginx + php + mysql安装、配置、自启动+redis扩展
    VirtualBox安装linux
    本地检出远程分支
    linux下的crontab安装及简单使用
  • 原文地址:https://www.cnblogs.com/mollnn/p/14409219.html
Copyright © 2020-2023  润新知