[原]OpenGL基础教程(五)缓冲区数据更新方式
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基础教程(五)缓冲区数据更新方式的更多相关文章
- [原]OpenGL基础教程(二)多边形绘制
上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行. 为什么要使用索引方式,总体来说提高性能.如何提高:使用顶点数组的好处是避免大量的函数调用.即避免每画一个顶点就调用1次glVert ...
- [原]OpenGL基础教程(一)多边形绘制
1.opengl开发环境搭建 参考http://brothergrup.iteye.com/blog/1602471 2.为三角形填充颜色: 填充颜色函数为glColor(3/4)*(r,g,b) ...
- [原]OpenGL基础教程(四)VBO+纹理绘制四边形
工程下载地址:http://pan.baidu.com/s/1ntr7NHv 提取码:yf1h 一.本文牵扯知识点梳理: (1)VBO (2)纹理 (3)libpng(加载png) (4)shader ...
- SpringCloud2.0 Feign 服务发现 基础教程(五)
1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...
- SpringCloud2.0 Hystrix Feign 基于Feign实现断路器 基础教程(七)
1.启动[服务中心]集群,工程名:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集 ...
- SpringCloud2.0 Hystrix Dashboard 断路器指标看板 基础教程(八)
1.启动基础工程 1.1.启动[服务中心]集群,工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) ...
- 书籍记录——C++大学基础教程(第五版)
C++大学基础教程(第五版) Small C++ How to Program,Fifth Edition,H.M.Deitel,P.J.Deitel 第一章 计算机.互联网和万维网简介 第二章 C+ ...
- Objective-C 基础教程第五章,复合
目录 Objective-C 基础教程第五章,复合 什么是复合? Car程序 自定义NSLog() 存取方法get Set Tires(轮胎) 存取方法 Car类代码的其他变化 扩展Car程序 复合还 ...
- Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...
随机推荐
- [Xamarin] 啟動拍照並且儲存 (转帖)
拍照對手機來說是很常用到的功能,許多App都基於在拍照上面,這篇文章主要大部分是在翻譯官方文件 (http://docs.xamarin.com/recipes/android/other_ux/ca ...
- OWIN规范中最让人费解的地方
OWIN defines a standard interface between .NET web servers and web applications. OWIN最让人费解不是OWIN的五大角 ...
- [HtmlUnit]Fetch Dynamic Html/Content Created By Javascript/Ajax
import com.gargoylesoftware.htmlunit.*; import com.gargoylesoftware.htmlunit.html.HtmlPage; import j ...
- We are doomed, and RPC does not help
第一种死法:Big ball of Mud 架构里最常用的反面案例是 big ball of mud.很大程度上可以说打格子,把复杂的系统拆解成小格子是架构师最重要的工作.这个小格子有很多种名字,比如 ...
- [BTS] RFC IDOC_INBOUND_ASYNCHRONOUS
Error Message: Log Name: ApplicationSource: BizTalk ServerDate: 9/10/2013 3:56: ...
- C#——Dictionary<TKey, TValue> 计算向量的余弦值
说明:三角函数的余弦值Cos我想,每个学计算机的理工人都知道,但是真的明白它的用途,我也是刚明白.每个人在初中或者高中的时候,都有这么个疑惑,学三角函数干什么用的?很直白的答案就是考试用的.而且当时的 ...
- [译]JavaScript中,{}+{}等于多少?
最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得 ...
- 酷派大神F2系列使用QPST进行nv备份和恢复,解决无信号问题(附备份文件)
测试机器: 大神F2联通版 8675_W00 系统COOLUI55 写贴原因: 自己无意间刷错了包,结果手机无信号,进入工程模式怎么设置都没有用.尝试过系统还原(备份过).刷新的ROM.线刷, ...
- 判断输入的数是否为数字,不使用isNaN
虽然不使用 isNaN ,但使用了 Math 的一些方法. <!-- Author: XiaoWen Create a file: 2016-12-08 11:14:34 Last modifi ...
- Liferay7 BPM门户开发之36: 使用Portlet filters过滤器做切面AOP
使用Portlet filters过滤器做切面AOP Portlet Filters定义于JSR286 Java Portlet Specification 2.0 Portlet Filters是为 ...