3D Computer Grapihcs Using OpenGL - 03 OpenGL Buffer Data
本节绘制一个三角形,并讲解Buffer Object-缓冲对象
OpenGL的窗口坐标
屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1.
Buffer Object
缓冲对象为内存中的一块空间,用来和OpenGL交互数据。
使用BufferObject的步骤:
- 创建Buffer的“名称”(或者理解为ID,地址), GLuint类型;
- 生成Buffer;
- 绑定Buffer到OpenGL的绑定点(Binding Point);
- 设置Buffer数据;
具体代码实现如下,修改MyGlWindow.cpp:
#include <gl\glew.h>
#include "MyGlWindow.h" void MyGlWindow::initializeGL()
{
glewInit();
GLfloat verts[]=
{
+0.0f, +1.0f,
-1.0f, -1.0f,
+1.0f, -1.0f,
};
GLuint myBufferID;
glGenBuffers(, &myBufferID);
glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
} void MyGlWindow::paintGL()
{
glClearColor(,,,);
}
13 行创建了一个GLuint对象(在OpenGL中可以用作对象的“名称",或者理解为ID或者类似指针的东西)。
14 行使用glGenBuffers函数创建了一个Buffer Object,第一个参数表示创建一个Buffer Object,第二个参数要使用一个GLuint类型对象的地址,用来把刚创建的Buffer Object的“地址/名称/ID”填充进去。
15 行把刚才创建的Buffer 对象绑定到OpenGL的一个GL_ARRAY_BUFFER绑定点。绑定点包括 GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER等。绑定以后,绑定点的操作和绑定的Buffer对象就是等价的了。
16 行给Buffer 对象填充进数据。第一个参数说明是给GL_ARRAY_BUFFER绑定点填充数据,因为上一步已经绑定了,这里其实就是在给Buffer 对象填充数据。第二个参数表示数据的长度,第三个是要填充的数据,第四个参数表示数据是否要经常变化,因为这里只绘制一次,就不在变化,所以使用GL_STATIC_DRAW。
3D Computer Grapihcs Using OpenGL - 03 OpenGL Buffer Data的更多相关文章
- 3D Computer Grapihcs Using OpenGL - 10 Color Buffer
本节我们将尝试利用三角形制作一个“走马灯”效果. 一个三角形如图示方式,从左向右依次移动. 先看一下代码: MyGlWindow.cpp #include <gl\glew.h> #inc ...
- 3D Computer Grapihcs Using OpenGL - 20 结合Buffer
在上一节的案例中,我们使用了四个Buffer Object,立方体的VertexBuffer,立方体的索引Buffer,四面体的VertexBuffer,四面体的索引Buffer. 我们这节尝试把两个 ...
- 3D Computer Grapihcs Using OpenGL - 16 使用DrawElementsInstanced绘制立方体
我们使用15节学到的知识来绘制14节的立方体. 在第14节我们使用了两次glDrawElements实现了OpenGL实例化,发现这样仍然不太方便,如果需要绘制成千上万的立方体,就需要手写成千上万次的 ...
- 3D Computer Grapihcs Using OpenGL - 09 Enable Depth Test
启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内. 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最 ...
- 3D Computer Grapihcs Using OpenGL - 06 Vertex and Fragment Shaders
从这里就接触到了可编程图形渲染管线. 下面介绍使用Vertex Shader (顶点着色器)和 Fragment Shader(像素着色器)的方法. 我们的目标是使用这两个着色器给三角形填充绿色. 添 ...
- 3D Computer Grapihcs Using OpenGL - 05 EBO
本节将采用两种方法绘制两个三角形. 先看第一种方法的代码 MyGlWindow.cpp #include <gl\glew.h> #include "MyGlWindow.h&q ...
- 3D Computer Grapihcs Using OpenGL - 19 Vertex Array Object(顶点数组对象)
大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上.因此直到教程已经进行了一大半,作者才引入VAO这个概念.在我看 ...
- 3D Computer Grapihcs Using OpenGL - 15 Draw Element Instanced
友情提示:继续本节之前,需要保存此前的代码,本节为了试验,会对代码做一些修改,但后续的修改需要我们把代码返回之前的进度. OpenGL内置支持Instancing,有专门的函数来处理这件事情. 为了方 ...
- 3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing
如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置.缩放.旋转不一样,那么我们可以不需要多次将这个物体的顶点信息.颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不 ...
随机推荐
- 20191128 Spring Boot官方文档学习(9.10)
9.10.数据库初始化 可以使用不同的方式初始化SQL数据库,具体取决于堆栈是什么.当然,如果数据库是一个单独的进程,您也可以手动执行.建议使用单一机制进行模式生成. 9.10.1.使用JPA初始化数 ...
- 关于SQL连接语句中的Integrated Security=SSPI/ture/false
解决方法:即:Security Support Provider Interface设置Integrated Security为 True 的时候,连接语句前面的 UserID, PW 是不起作用的, ...
- 第九周总结&第七次实验报告
实验7 实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 实验过程 ...
- MySQL8 clone plugin
安装MySQl8.0.17 下载 MySQL8.0.17 二进制版本 https://dev.mysql.com/downloads/mysql/ 解压,修改权限 -linux-glibc2.-x86 ...
- RBAC----基于角色的访问权限控制
RBAC是什么? 基于角色的权限访问控制(Role-Based Access Control) 作为传统访问控制(自主访问.强制访问)的有前景的代替 受到了广泛的关注. 在RBAC中,权限与角色相关联 ...
- SQL server字符分割
USE [vanke_develop] GO /****** Object: UserDefinedFunction [dbo].[func_Split] Script Date: 2019/5/22 ...
- C++基础-类和对象
本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...
- 设计模式开闭原则--java
静态工厂模式 + 反射控制入参范围 public interface IPrinter { void print(); } public class CanonPrinter implements I ...
- Apple Pay接入详细教程
Apple Pay接入详细教程 来源:Yasin的简书 链接:http://www.jianshu.com/p/738aee78ba52# Apple Pay运行环境:iPhone6以上设备,操作 ...
- IDEA创建maven的web项目时,main文件夹下没有java,resources目录等源文件夹
https://blog.csdn.net/qq_34377273/article/details/83183307