现在前面的废话:最近好事不断!十分开心!生活真美好!

好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍。之前介绍过,OpenGL操作的是一组3D坐标,所以我们的输入也必须是包含了x,y,z这三个方向,并且将他们放入一个数组之中。

加入我们要画出一个三角形,先看如下表示

这里的每三个为一组坐标,并且注意,OpenGL不是简单地把所有的3D坐标变换为屏幕上的2D像素;OpenGL仅当3D坐标在3个轴(x、y和z)上都为-1.0到1.0的范围内时才处理它。这就是为啥我们给出的范围是1.0>坐标>-1.0。因为超出这个位置的地方,opengl不做处理。当然不处理的话就不会渲染出图形。

好了现在我们需要在引入一个名叫标准化设备坐标,当我们的顶点被顶点着色器处理过后,他们就变成标准化坐标。这里注意新的坐标轴与我们通常的屏幕坐标轴不同,通常我们屏幕坐标轴的中心在左上角,而这种坐标的中心在整个图像的中心。如下图所示。

好了确定好了三个顶点的位置,那么OpenGL是怎么知道我想要那个数组中那三个组成一个顶点呢?换句话说,目前我们所创建的那个数组即将被我们传入了顶点着色器,而我们的顶点着色器会专门在GPU上创建好空间储存他们,但是OpenGL还不知道我们要怎么解释这些点的作用,打个比方就是,材料放到厨房了,厨师还不知道你想吃啥样的菜,所以他没动。

在这之前我们再引入一个新概念,顶点缓冲对象(Vertex Buffer Objects, VBO),如果每次只传入一个点,这样会浪费很多效率,所以我们用VBO来管理这个地方上的内存(注意这里还没进入GPU),让我们一次性传输多个顶点进入显存(同时受VBO管理),而我们的顶点着色器可以几乎很快从现存里读取数据。

OpenGL有很多缓冲对象类型,顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER。我们可以使用glBindBuffer函数把新创建的缓冲(VBO)绑定到GL_ARRAY_BUFFER目标上。这里这个对象GL_ARRAY_BUFFER,可以看作成一个是一个结构体里面有很多东西需要我们去适配,而绑定到这个对象上可以理解为我们,之后所有对GL_ARRAY_BUFFER的缓冲调用,都将用于配置其中的缓冲这里配置的就是VBO。

好的,还记得我们的那个数组吗?现在我们赶紧从之前定义的数组里面复制一份数据到我们的VBO里面来。这里使用glBufferData(GL_ARRAY_BUFFER,sizeof(vertex),vertex,GL_STATIC_DRAW).

第一个参数表示我们想要操作的对象的类型,这里直接写定点缓冲对象的类型,第二个是数组容量,第三个是你想要复制进VBO的目标,最后一个比较特殊。我们知道当,显卡运转的时候VBO会反复传递资源给显存,那么这里有个问题,如果我们的VBO里面的数据不经常改变的话,总是传了又传很占资源。所以最后一个设置为GL_STATIC_DRAW,因为我们仅仅想显示一个固定图像,不需要其他操作。此外还有这些选择

  • GL_STATIC_DRAW :数据不会或几乎不会改变。
  • GL_DYNAMIC_DRAW:数据会被改变很多。
  • GL_STREAM_DRAW :数据每次绘制时都会改变。
    好了今天暂时总结到这。争取下次快点更新!

Opengl_入门学习分享和记录_02_渲染管线(一)顶点输入的更多相关文章

  1. Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器

    写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...

  2. Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接

    ---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...

  3. Opengl_入门学习分享和记录_03_渲染管线(三)借助顶点数组对象VAO提高绑定属性效率

    目前我们已经知道了,如果想要顶点着色器解释理解我们的输入数据,就必须要按照以下繁琐的步骤:第一步:将输入的数据复制一份到缓冲区,供OpenGL使用.而这块新出现的区域由VBO管理和表示.(若有多个输入 ...

  4. Opengl_入门学习分享和记录_00

    2019.7.4 本着对游戏创作的热情,本人初步了解了一部分的unity引擎的使用,也学习了一点C#可是越学习unity我就反而对引擎内部感兴趣(不知道有没有一样的朋友=,=). 接着了解到了open ...

  5. Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)

    写在前面的废话: 这个系列拖更了很久,很大一定程度上是由于自己最近忙着高数学习和线代学习..感觉时间特别紧缺(其实就是我太懒了)好了不废话了,总结开始. 正文开始: 首先Graphics Pipeli ...

  6. Opengl_入门学习分享和记录_番外篇01(MacOS上如何在Xcode 开始编辑OpenGL)

    写在前面的废话: 哈哈 ,我可真是勤勉呢,今天又来更新了,这篇文章需要大家接着昨天的番外篇00一起食用! 正文开始: 话不多说,先看代码. 这里主要全是使用的glfwwindowhint 这个函数,他 ...

  7. Opengl_入门学习分享和记录_番外篇00(MacOS上如何给Xcode 适配openGL)

    现在前面的废话:哇这次没有鸽太久,突然想起来还没有介绍如何适配opengl的衍生库.今天一并介绍下,同样看时间允不允许,让我再把之前学到的一些东西再次总结一遍. 正文开始: 首先大家要知道我们的Ope ...

  8. Redis入门学习(学习过程记录)

    Redis(入门笔记) 学习一个大的技术点,然后顺带着就把这个技术点的面试题给学习了. 学习完一个技术后,如果面试题还不能够解答的话,只能说明学的不精,需要查漏补缺. 下一个学习的方向:Redis-非 ...

  9. Bootstrap入门学习笔记(只记录了效果)

    基本头文件 <!DOCTYPE html> <html> <head> <title>Bootstrap 实例</title> <me ...

随机推荐

  1. (转)VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    原文:https://www.cnblogs.com/zsy/p/5958170.html 1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时, ...

  2. 什么是JDK什么是JRE?JDK和JRE的关系

    什么是JDK什么是JRE?JDK和JRE的关系 我们看看来自百度百科的解释: JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心 ...

  3. C程序中可怕的野指针

    一.疑问点指针是C语言一个很强大的功能,同时也是很容易让人犯错的一个功能,用错了指针,轻者只是报个错,重者可能整个系统都崩溃了.下面是大家在编写C程序时,经常遇到的一种错误的使用方法,也许在你的学习和 ...

  4. VSCode 云同步扩展设置 Settings Sync 插件

    VSCode 云同步扩展设置 Settings Sync 插件 Hi.大家好,今天又是美好的一天. 关于 Settings Sync扩展: Settings Sync可以同步你当前的VSCode配置环 ...

  5. Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)

    上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...

  6. 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager

    问题描述 最近在进行一个项目的开发,其中使用到了Tablayout+Fragment+viewPager来搭建一个基本的框架,从而出现了设置数据适配器的时候,item的位置错乱问题.我打印log日志的 ...

  7. python面向对象的继承-组合-02

    *面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...

  8. vue教程(三)-slot\keep-alive的使用

    一.slot其实就是填坑操作,父组件传递dom结构,是vue提供的一种内置组件(组件知识请查看上篇博客内容) 写法:<slot></slot> 例子: var child = ...

  9. linux初学者-普通磁盘分区篇

    linux初学者-普通磁盘分区篇 磁盘是计算机的重要组成部分,是记录数据的场所.在使用磁盘时,经常需要对其进行分区来实现不同的用途.下文将介绍在linux系统中普通磁盘分区的方法. "fdi ...

  10. linux初学者-虚拟机管理篇

    linux初学者-虚拟机管理篇 之前已经介绍过,在linux系统的学习中,一般需要在虚拟机中进行操作,但是虚拟机是如何安装的呢?又是如何管理的呢?下文将对虚拟机的安装和管理进行一个简要的介绍. 1.虚 ...