当前位置:网站首页>OpenGL (1)顶点缓冲
OpenGL (1)顶点缓冲
2022-07-21 06:38:00 【thefist11】
1. 顶点缓冲对象(Vertex Buffer Objects, VBO)
会在GPU内存(通常被称为显存)中储存大量顶点。用来管理这个内存,它使用这些缓冲对象的好处是我们可以一次性的发送一大批数据到显卡上,而不是每个顶点发送一次。
step1. 使用glGenBuffers函数和一个缓冲ID生成一个VBO对象
unsigned int VBO;
glGenBuffers(1, &VBO);
OpenGL有很多缓冲对象类型,顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER。
step2. 使用glBindBuffer函数把新创建的缓冲绑定到GL_ARRAY_BUFFER目标上
glBindBuffer(GL_ARRAY_BUFFER, VBO);
从这一刻起,我们使用的任何(在GL_ARRAY_BUFFER目标上的)缓冲调用都会用来配置当前绑定的缓冲(VBO)。
step3. 可以调用glBufferData函数把之前定义的顶点数据复制到缓冲的内存中:
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBufferData是一个专门用来把用户定义的数据复制到当前绑定缓冲的函数。
参数一:目标缓冲的类型,顶点缓冲对象当前绑定到GL_ARRAY_BUFFER目标上。
参数二:指定传输数据的大小(以字节为单位);用一个简单的sizeof计算出顶点数据大小就行。
参数三:发送的实际数据。
参数四:指定了我们希望显卡如何管理给定的数据。它有三种形式:
GL_STATIC_DRAW :数据不会或几乎不会改变。
GL_DYNAMIC_DRAW:数据会被改变很多。
GL_STREAM_DRAW :数据每次绘制时都会改变。
三角形的位置数据不会改变,每次渲染调用时都保持原样,所以它的使用类型最好是GL_STATIC_DRAW。eg. 说一个缓冲中的数据将频繁被改变,那么使用的类型就是GL_DYNAMIC_DRAW或GL_STREAM_DRAW,这样就能确保显卡把数据放在能够高速写入的内存部分。
现在我们已经把顶点数据储存在显卡的内存中,用VBO这个顶点缓冲对象管理。
边栏推荐
猜你喜欢
随机推荐
What is the new generation of enterprise IT architecture? Cloud primordial? Low code?
Business innovation driven by metadata to build new competitive advantages of enterprises
vs2022 快捷键设置
"Core engine" of Technology
mysql docker安装 主从部署
06. Introduction, installation and simple use of octave
How PHP queries whether there are specified tables in MySQL database
Uniapp wechat applet user authorization to obtain user information
Qt:QString和QStringList
Unity learning notes - Hot update related
C language flexible array
TCP/IP协议栈Lwip的设计与实现:之六
网关的简单理解
Web automation processing "sliding verification code"
子网掩码的作用
【日常训练】1260. 二维网格迁移
逍遥管理器安装
DOM -- preloading and lazy loading
malloc 和 空间配置器
如何开启自己的网络人生