Learn OpenGL 笔记2.4 - Getting started-HelloTriangle

学习地址:LearnOpenGL - Hello Triangle

知识点记录:

1.图形渲染管线(Pipeline)

图形渲染管线指的是对一些原始数据经过一系列的处理变换并最终把这些数据输出到屏幕上的整个过程。

图形渲染管线的整个处理流程可以被划分为几个阶段,上一个阶段的输出数据作为下一个阶段的输入数据,是一个串行的,面向过程的执行过程。每一个阶段分别在GPU上运行各自的数据处理程序,这个程序就是着色器。

部分着色器允许我们使用着色语言(OpenGL Shading Language)编写自定义的着色器,这样就可以更为细致的控制图像渲染流程中的特定处理过程了,下图是一个图形渲染管线每一个阶段的抽象表示,蓝色部分代表允许自定义着色器。

顶点数据是一些顶点的集合,顶点一般是3维的点坐标组成。

基本图元(Primitives)包括点,线段,三角形等,是构成实体模型的基本单位,需要在传入顶点数据的同时通知OpenGL这些顶点数据要组成的基本图元类型。

顶点着色器(Vertex Shader)包含对一些顶点属性(数据)的基本处理。

基本图元装配(Primitive Assembly)把所有输入的顶点数据作为输入,输出制定的基本图元。

几何着色器(Geometry Shader)把基本图元形式的顶点的集合作为输入,可以通过产生新顶点构造出新的(或是其他的)基本图元来生成其他形状。

细分着色器(Tessellation Shaders)可以把基本图元细分为更多的基本图形,创建出更加平滑的视觉效果。

光栅化(Rasterization)即像素化,把细分着色器输出的基本图形映射为屏幕上网格的像素点,生成供片段着色器处理的片段(Fragment),光栅化包含一个剪裁操作,会舍弃超出定义的视窗之外的像素。

片段着色器(Fragment Shader)的主要作用是计算出每一个像素点最终的颜色,通常片段着色器会包含3D场景的一些额外的数据,如光线,阴影等。

测试与混合是对每个像素点进行深度测试,Alpha测试等测试并进行颜色混合的操作,这些测试与混合操作决定了屏幕视窗上每个像素点最终的颜色以及透明度。

在整个渲染管线中需要自定义处理的主要是顶点着色器和片段着色器。
 

2.VBO (vertex buffer objects) 顶点缓冲对象 

2.1 在GPU内存中,存储顶点数据。

顶点缓冲对象VBO是在显卡存储空间中开辟出的一块内存缓存区,用于存储顶点的各类属性信息,如顶点坐标,顶点法向量,顶点颜色数据等。在渲染时,可以直接从VBO中取出顶点的各类属性数据,由于VBO在显存而不是在内存中,不需要从CPU传输数据,处理效率更高。

所以可以理解为VBO就是显存中的一个存储区域,可以保持大量的顶点属性信息。并且可以开辟很多个VBO,每个VBO在OpenGL中有它的唯一标识ID,这个ID对应着具体的VBO的显存地址,通过这个ID可以对特定的VBO内的数据进行存取操作。

2.2 VBO在OpenGL中属于GL_ARRAY_BUFFER.

OpenGL可以同时绑定不同种类的Buffer

        //顶点数据
        float vertices[] = {
             0.5f,  0.5f, 0.0f,  // top right
             0.5f, -0.5f, 0.0f,  // bottom right
            -0.5f, -0.5f, 0.0f,  // bottom left
            -0.5f,  0.5f, 0.0f   // top left 
        };

        //定义VBO,并指定一个唯一id=1
        unsigned int VBO;
        glGenBuffers(1, &VBO);

        // 绑定 GL_ARRAY_BUFFER 种类的Buffer----VBO
        glBindBuffer(GL_ARRAY_BUFFER, VBO);

        // 把顶点数据传入GL_ARRAY_BUFFER类型的缓存器VBO
        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

3.VAO(vertex array object) 顶点数组对象

VBO保存了一个模型的顶点属性信息,每次绘制模型之前需要绑定顶点的所有信息,当数据量很大时,重复这样的动作变得非常麻烦。VAO可以把这些所有的配置都存储在一个对象中,每次绘制模型时,只需要绑定这个VAO对象就可以了。

VAO是一个保存了所有顶点数据属性的状态结合,它存储了顶点数据的格式以及顶点数据所需的VBO对象的引用。

VAO本身并没有存储顶点的相关属性数据,这些信息是存储在VBO中的,VAO相当于是对很多个VBO的引用,把一些VBO组合在一起作为一个对象统一管理。

执行VAO绑定之后其后的所有VBO配置都是这个VAO对象的一部分,可以说VBO是对顶点属性信息的绑定,VAO是对很多个VBO的绑定。

3.1 任何接下来顶点的属性调用,都会存储在VAO中

        //定义VAO
        unsigned int VAO;
        glGenVertexArrays(1, &VAO);
        
        //绑定VAO
        glBindVertexArray(VAO);

4.EBO(Element Buffer Object) 索引缓冲对象

索引缓冲对象EBO相当于OpenGL中的顶点数组的概念,是为了解决同一个顶点多洗重复调用的问题,可以减少内存空间浪费,提高执行效率。当需要使用重复的顶点时,通过顶点的位置索引来调用顶点,而不是对重复的顶点信息重复记录,重复调用。


EBO中存储的内容就是顶点位置的索引indices,EBO跟VBO类似,也是在显存中的一块内存缓冲器,只不过EBO保存的是顶点的索引。
 

float vertices[] = {
     0.5f,  0.5f, 0.0f,  // top right
     0.5f, -0.5f, 0.0f,  // bottom right
    -0.5f, -0.5f, 0.0f,  // bottom left
    -0.5f,  0.5f, 0.0f   // top left 
};
//顶点索引,比如0,1,3表示 
// 0:vertices中的第1行代表的顶点
// 1:vertices中的第2行代表的顶点,
// 3:vertices中的第4行代表的顶点,
unsigned int indices[] = {  // note that we start from 0!
    0, 1, 3,   // first triangle
    1, 2, 3    // second triangle
}; 

//定义EBO
unsigned int EBO;
glGenBuffers(1, &EBO);

//绑定顶点索引 indices
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); 

当用EBO绑定顶点索引的方式绘制模型时,需要使用glDrawElements而不是glDrawArrays: 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Stable Baselines3 是一个用于强化学习的Python库,它提供了训练和评估强化学习算法的工具。 要开始使用 Stable Baselines3,首先需要安装它。可以通过 pip 安装稳定的 Baselines3: ``` pip install stable-baselines3 ``` 安装完成后,我们可以导入所需的模块并开始构建我们的强化学习模型。 首先,我们需要选择一个适合我们任务的强化学习算法。Stable Baselines3 提供了多种算法,比如 A2C、PPO、SAC等。选择算法后,我们可以实例化一个模型对象。 ```python from stable_baselines3 import A2C model = A2C('MlpPolicy', 'CartPole-v1', verbose=1) ``` 在这个例子中,我们选择了 A2C 算法,并将其用于 CartPole-v1 的任务。 接下来,我们可以使用模型对象对算法进行训练。 ```python model.learn(total_timesteps=10000) ``` 这里我们使用了 learn 方法来训练模型,total_timesteps 参数指定了总的训练步数。 训练完成后,我们可以使用训练好的模型来进行评估。 ```python mean_reward, std_reward = evaluate_policy(model, 'CartPole-v1', n_eval_episodes=10) ``` 这里我们使用了 evaluate_policy 方法来评估模型的性能,n_eval_episodes 参数指定了评估时的回合数。 除了训练和评估,Stable Baselines3 还提供了其他功能,比如加载和保存模型、可视化训练过程等。 总的来说,使用 Stable Baselines3 进行强化学习任务非常方便。只需要选择适合的算法、构建模型对象、训练和评估模型,就可以快速地开展强化学习研究和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值