OpenGl学习笔记-(一)绘制三角形

OpenGl学习笔记-入门

这学期有计算机图形学这门课,opengl的学习过程感觉比较困难,写一些博客分享,也作备忘。


学习环境

OpenGL 3.3+

GLEW+GLFW+ImGUI(imgui的环境配置很坑)

学习网站:https://learnopengl-cn.readthedocs.io/zh/latest/

OpenGL的hello world—绘制三角形

三角形是最基础的封闭图形,绘制一个三角形可以说是OpenGL最好的入门程序。

方法思路:

首先如果完全不了解OpenGL,让我们去绘制一个三角形,一般人理解的过程会是什么?

1.输入三个顶点,然后通过一些函数,画出一个三角形。
2.给三角形填充颜色

其中对第一步我们想的更细一点可以是:将3个顶点两两连线,成为一个封闭的三角形线框。

如何在OpenGL中实现

坐标体系:

OpenGL将图像呈现在屏幕上的坐标系统用的是:

标准化设备坐标(Normalized Device Coordinates, NDC)

标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。下面你会看到我们定义的在标准化设备坐标中的三角形(忽略z轴):
这里写图片描述
与通常的屏幕坐标不同,y轴正方向为向上,(0, 0)坐标是这个图像的中心,而不是左上角。最终你希望所有(变换过的)坐标都在这个坐标空间中,否则它们就不可见了。

我们可以给出下面这样一个顶点坐标变量(GLfloat是OpenGl内定义的变量类型,参考float)

GLfloat vertices[] = {
    -0.5f, -0.5f, 0.0f,
     0.5f, -0.5f, 0.0f,
     0.0f,  0.5f, 0.0f
};

顶点输入

有了顶点数据后我们需要做的是将顶点输入给电脑,这里当然不能说直接就传递一个数组变量给电脑,这种做法不够体系化。

OpenGl的做法:VAO,VBO

(VAO和VBO是OpenGl3.3版本以上使用的,之前版本有使用glBegin 等函数 这里不做介绍)

VAO(Vertex Array Object)

VAO可以看作是一个管理定点属性用的对象,注意:这里说的是顶点属性,而不是顶点。在图像绘制中一个顶点具有的属性除了坐标以外,还有如同颜色等属性。VAO存储了顶点数据的格式以及顶点数据数据所需的缓存对象的引用。

VBO(Vertex Buffer Object)

VBO是一种Buffer Object,即它也是一个OpenGl对象。VBO是顶点数组数据真正所在的地方。

那么可能有人会迷惑,VAO和VBO的区别是什么,他们不都是用来存放点的数据的吗?

可以这么说:VAO是一个包含所有点的对象,VBO从这个VAO里拿出一些或者全部点,被发送到GPU上以供使用。

说这么多,我们来看看具体用代码如何将上面我们的vertex点集放入到VAO和VBO中:

GLuint VBO, VAO;
glGenVertexArrays(1, &VAO); //创建VAO的函数,这里的1代表数量
glGenBuffers(1, &VBO); //创建VBO的函数

glBindVertexArray(VAO);//要想使用VAO,先绑定

glBindBuffer(GL_ARRAY_BUFFER, VBO);//绑定缓冲,这里GL_ARRAY_BUFFER是顶点传冲类型
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//把之前定义的顶点数据复制到缓冲的内存中

//设置顶点属性指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值