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

好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍。之前介绍过,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. Django rest framework(1)----认证

    目录 Django组件库之(一) APIView源码 Django restframework   (1)  ----认证 Django rest framework(2)----权限 Django ...

  2. IT人士如何扛起工作生活两座大山

    前言 当我们年轻时,初入职场,意气风发,恨不能倾尽所有精力工作,奋发图强.建功立业.当我们有了家庭,发现我亦凡人,事业家庭想两手抓,却两难兼顾.后来,我们发现工作生活两顾本身就是一个幻想,我们做的,只 ...

  3. java字符串的替换replace、replaceAll、replaceFirst的区别

    看代码: String s = "my.test.txt"; System.out.println(s.replace(".", "#")) ...

  4. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver

    大家一谈数据库,就觉得非常高深莫测,深不见底,非凡人敢去触摸.但Excel的话,没人敢说自己不会使用吧(相反一大堆人的简历上写着精通OFFICE所有软件套件).换作其他非微软厂商的数据库,的确很容易产 ...

  5. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

  6. [leetcode] 679. 24 Game (Hard)

    24点游戏,游戏规则就是利用().+.-. *. /,对四个数字任意运算,可以得出24点则为true. 排列组合问题,最多有A42*A32*A22*4*4*4,也就是12*6*2*4*4=9216种组 ...

  7. [leetcode] 147. Insertion Sort List (Medium)

    原题 别人的思路 非常简洁 function ListNode(val) { this.val = val; this.next = null; } /** * @param {ListNode} h ...

  8. Mybatis generator生成工具简单介绍

    Mybatis generator  其主要的功能就是方便,快捷的创建好Dao,entry,xml 加快了开发速度,使用方面根据其提供的规则配置好就OK 这里还有一个重要的开发场景,开发过程中,对数据 ...

  9. 《VR入门系列教程》之22---GearVR SDK代码剖析

    GearVR SDK代码剖析     接下来我们来了解一下GearVR开发包的底层代码,它底层的代码和之前在第三章中讲的桌面SDK代码非常类似,当然,也有许多不同的地方.     首先,我们看看如何构 ...

  10. DEDECMS教程:织梦栏目更新HTML出现“模板文件不存在,无法解析文档”的解决方法(转)