openGL学习-2

学习文章链接
B站讲解链接
顶点数组对象:Vertex Array Object,VAO
顶点缓冲对象:Vertex Buffer Object,VBO
元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO

3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线管理的

图形渲染管线分为两部分:
1.把3D坐标转化为2D坐标
2.把2D坐标转变为实际有颜色的像素
注意:2D坐标和像素是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕或者窗口分辨率的限制

一个顶点是一个3D坐标的数据的集合
顶点数据是用顶点属性表示的

图元(Primitive):让OpenGL知道我们的坐标和颜色值构成的到底是什么
例如:
GL_POINTS:将数据渲染成一系列的点
GL_TRIANGLES:将数据渲染成一系列的三角形
GL_LINE_STRIP:将数据渲染成一系列的长长的线

图形管线渲染具体拆分:
1.顶点着色器(Vertex Shader):把一个单独的顶点作为输入,将3D坐标转为另一种3D坐标,同时允许我们对顶点属性进行一些基本的处理
2.图元装配(Primitive Assembly):将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并将所有的点装配成指定图元的形状
3.几何着色器(Geometry Shader):把图元形式的一系列顶点的集合作为输入,可以通过产生新顶点构造出新的(或是其它的)图元来生成其它形状
4.光栅化阶段(Rasterization Stage):接收来自几何着色器的输出,会将图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。
OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据。
5.片段着色器(Fragment Shader):主要目的是计算一个像素的最终颜色,通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。
6.Alpha测试和混合(Blending)阶段:这个阶段检测片段的对应的深度(和模板(Stencil))值,用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。
图形管线渲染

对于大多数场合,我们只需要配置顶点和片段着色器就行了。几何着色器是可选的,通常使用它默认的着色器就行了。
在现代OpenGL中,我们必须定义至少一个顶点着色器和一个片段着色器

标准化设备坐标(Normalized Device Coordinates):3D坐标在3个轴(x,y,z)上-1.0到1.0的范围内的坐标,此范围内的坐标最终显示在屏幕上(在这个范围以外的坐标则不会显示)

// 顶点数组
float vertices[] = {  
    -0.5f, -0.5f, 0.0f,
     0.5f, -0.5f, 0.0f,
     0.0f,  0.5f, 0.0f
};
// 创建缓冲对象
unsigned int VBO;  
glGenBuffers(1, &VBO);
// 绑定VBO缓对象  
glBindBuffer(GL_ARRAY_BUFFER, VBO);
// 填充VBO数据
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值