1、glBufferSubData 适用于相同数据类型

void SetPositionY(float y)
{
    vector<Vector3<float>>::iterator ver3;
    for(ver3 = vertices.begin();ver3!=vertices.end();ver3++)
    {
        ver3->y +=y;
    }
    glBindBuffer(GL_ARRAY_BUFFER,posHandler);
    glBufferSubData(GL_ARRAY_BUFFER,0,vertices.size() * sizeof(vertices[0]),&vertices[0]);
    glBindBuffer(GL_ARRAY_BUFFER,0);
    display( );
}

2、glMapBuffer 适用于对缓冲区大部分数据更新

void SetPositionY(float y)
{
  ....................
    glBindBuffer(GL_ARRAY_BUFFER,posHandler);
    void *buf = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    memcpy(buf, &vertices[0], sizeof(vertices[0])*vertices.size());
    glUnmapBuffer(GL_ARRAY_BUFFER);
    glBindBuffer(GL_ARRAY_BUFFER,0);
    ..............
}

以上两种方式效果图:

3、glMapBufferRange 适用于大缓冲区里面小部分数据更新

void SetPositionY(float y)
{
  .............
    glBindBuffer(GL_ARRAY_BUFFER,posHandler);
    void *buf = glMapBufferRange(GL_ARRAY_BUFFER, 0,  sizeof(vertices[0])*50, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
    memcpy(buf, &vertices[0], sizeof(vertices[0])*50);
    glUnmapBuffer(GL_ARRAY_BUFFER);
    glBindBuffer(GL_ARRAY_BUFFER,0);
    ..............................
}

因为所有字是一个数组 更新前50个顶点 所以有点乱

特别说明:更新完数据 一定要调从绘函数 也就是glutDisplayFunc绑定的回调函数 ,本文为display( );

参考:http://iqnix.blog.163.com/blog/static/21721982014228115223718/

     http://www.zwqxin.com/archives/opengl/learn-vbo.html

[原]OpenGL基础教程(五)缓冲区数据更新方式的更多相关文章

  1. [原]OpenGL基础教程(二)多边形绘制

    上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行. 为什么要使用索引方式,总体来说提高性能.如何提高:使用顶点数组的好处是避免大量的函数调用.即避免每画一个顶点就调用1次glVert ...

  2. [原]OpenGL基础教程(一)多边形绘制

    1.opengl开发环境搭建 参考http://brothergrup.iteye.com/blog/1602471 2.为三角形填充颜色: 填充颜色函数为glColor(3/4)*(r,g,b)  ...

  3. [原]OpenGL基础教程(四)VBO+纹理绘制四边形

    工程下载地址:http://pan.baidu.com/s/1ntr7NHv 提取码:yf1h 一.本文牵扯知识点梳理: (1)VBO (2)纹理 (3)libpng(加载png) (4)shader ...

  4. SpringCloud2.0 Feign 服务发现 基础教程(五)

    1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...

  5. SpringCloud2.0 Hystrix Feign 基于Feign实现断路器 基础教程(七)

    1.启动[服务中心]集群,工程名:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集 ...

  6. SpringCloud2.0 Hystrix Dashboard 断路器指标看板 基础教程(八)

    1.启动基础工程 1.1.启动[服务中心]集群,工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) ...

  7. 书籍记录——C++大学基础教程(第五版)

    C++大学基础教程(第五版) Small C++ How to Program,Fifth Edition,H.M.Deitel,P.J.Deitel 第一章 计算机.互联网和万维网简介 第二章 C+ ...

  8. Objective-C 基础教程第五章,复合

    目录 Objective-C 基础教程第五章,复合 什么是复合? Car程序 自定义NSLog() 存取方法get Set Tires(轮胎) 存取方法 Car类代码的其他变化 扩展Car程序 复合还 ...

  9. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...

随机推荐

  1. [PHP-Socket] Socket Programming in PHP

    Simple Client-Server socket program in PHP Introduction Sockets are used for interprocess communicat ...

  2. 记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)

    记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?) 前几天帮客户优化一个数据库,那个数据库的大小是6G 这麽小的数据库按道理不会有太大的性能问题的, ...

  3. 12 个 Web 设计师必备的 Bootstrap 工具

    转自:http://www.oschina.net/translate/12-best-bootstrap-tools-for-web-designers Bootstrap是一个非常棒的前端网站开发 ...

  4. 作业七:团队项目——Alpha版本冲刺阶段-03

    昨天进展:完善界面设计以及象棋图片的绘制 存在问题:人力不足,任务量大. 今天安排:象棋图片的绘制

  5. GCD使用dispatch_group_notify、dispatch_group_enter、dispatch_group_leave处理多线程同步操作

    一.简介 dispatch_group_enter:通知group,下面的任务马上要放到group中执行了. dispatch_group_leave:通知group,任务完成了,该任务要从group ...

  6. iOS开发---集成百度地图完善版

    一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...

  7. Android shape 渐变!描边!圆角!示例详解

    看看shape的用法,确实很有帮助.这里我偷懒转一篇比较详细的帖子,和大家一起进步~! Android 中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体 ...

  8. 在VC项目中附加包含目录

    1.VC2010项目中附加包含目录 上图项目中附加了两个文件夹,一个是上级目录下的CommonClass,一个是下级目录下的invengo. 使用这两个目录下的类时直接在include后面写头文件名即 ...

  9. WordPress安装使用问题记录

    本文记录在使用WordPress过程中的问题和解决. 安装 比较顺利没有问题,具体如下(CentOS 6.5,DO的CentOS7 image里默认的yum源没有mysql-serve比较奇怪r): ...

  10. Log4cpp介绍及使用

    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...