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

好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍。之前介绍过,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. ajax 前端发含有列表的数据

    在前端页面也可以给后端发送一个包含列表的数据 html <body> <h3>index页面 </h3> <input type="text&quo ...

  2. Spring boot ,dubbo整合异常

    Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException: com.guooo.boot.acc.serv ...

  3. 简单学习之json格式说明

    json格式说明: 1.对象是一个无序的“‘名称/值’对”集合. (1)一个对象以“{”(左括号)开始,“}”(右括号)结束. (2)每个“名称”后跟一个“:”(冒号): (3)“‘名称/值’ 对”之 ...

  4. [转载] 管Q某犇借的手写堆

    跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多. 其实就是维护了一个二叉堆,写进结构体里,就没啥了... 据说达哥去年NOIP靠这个暴力多骗了分 合并果子... templat ...

  5. .Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解

    前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解.而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS ...

  6. Java用Xom生成XML文档

    这个总结源于Java编程思想第四版18.13节的案例: 完整代码地址: Java编程思想:XML 相关Api地址: Attribute Element Document Serializer 由于案例 ...

  7. python如何将一个多位数数值转换为列表类型

    现在:a = 10,由于暂时没找到更好的方法,且使用下面的方法进行转换. 目标:转化为['10'] 以下为错误尝试: 1.直接转换,提示整型对象不可迭代. 2.先转换为字符串,再转换为列表,发现被分成 ...

  8. 写给后端同学的vue

    安装环境 安装vue-cli 脚手架 1. 安装nodejs环境 下载地址: (nodejs)[https://nodejs.org/zh-cn/download/] 安装(略) 2. 安装vue-c ...

  9. C#控制台打开VM虚拟机

    添加引用->VixCOM.dll (在vix文件夹下) VixWrapper.cs using System; using System.Collections.Generic; using S ...

  10. (图文教程)IntelliJ IDEA 导入Eclipse/MyEclipse 项目 配置详解+快捷键分享

    (图文教程)IntelliJ IDEA 导入Eclipse/MyEclipse 项目 配置详解+快捷键分享 IntelliJ IDEA 使用教程.快捷键配置. 该教程针对原始jar包依赖的工程.mav ...