---恢复内容开始---

写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的。(小声bb)

正文开始:之前已经编译好的着色器中还有一些问题,比如

layout(location=0) in vec3 position;这句代码中layout (location= 0)的含义。今天我将详细介绍他的作用。

但是在这之前我想完善一下之前所说的 顶点数据 这个概念,由于之前的例子会给大家一种,顶点数据仅仅只是给出了顶点所在坐标系中位置这一种错觉,其实它还应该包含许多其他信息,这些所谓的信息则是描述我们顶点的有关信息,比如颜色和纹理等等。而这些顶点数据输入,当他们进入到顶点着色器后,会被着色器划分入不同的顶点属性位置。

Attentio:在进入到顶点着色器后,所有的数据都将被分成多组顶点属性,并且呈紧密排列,我们之前所用来定义坐标位置,颜色,纹理等信息的都将被分开并进入其中某一个顶点属性,多种顶点属性为一组叫顶点属性组。

现在我们再看之前那段代码,会有很多不同数据来描述对象不同的特性如颜色,位置,等等。我们要做的就是,将描述不同属性的数据放入同一组顶点属性,所以我们用layout关键字,他的作用是在顶点属性组中分配位置序号方便之后顶点数据进入特定的区域,这里把申明的变量 position(顶点属性--位置)的位置值设为0。这个location 0 仅是对与顶点着色器来说,,用于之后区分属性区。

分配好空间之后,我们就可以开始把顶点数组分组使其能够进入准确的顶点属性。说的抽象点就是:为顶点着色器解释说明我们的顶点数据输入究竟是怎么使用的。(哪些数据表示位置?哪些数据表示颜色,等)

如图所示:

接下来就是具体操作,我们用到的函数是glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0 ) 参数很多,我逐一解释。

首先第一个参数,表示存放的目的地为顶点着色器的location为0的位置。

第二个参数 3 表示我们一次性从VBO中取3个连续数据,放入location 。

第三个参数 GL_FLOAT 表示传入的这三个数据的 数据类型。

第四个 这个参数定义我们是否希望数据被标准化(Normalize)。如果我们设置为GL_TRUE,所有数据都会被映射到0(对于有符号型signed数据是-1)到1之间。我们把它设置为GL_FALSE

第五个,表示步长。这里按我的理解,首先顶点着色器内部每次只有当我们要求它参与渲染,或者说画点的时候他才会再次从我们的VBO中读取生成一整套顶点属性组,但是我们的顶点数据又是按照一组一组顶点属性组的属性顺序来写入的,比如(3个float--位置, 3个float 颜色, 2个float渲染),当顶点着色器想要读取下一套时,读取数据用的pointer需要从上次的位置往后移动一套顶点属性组的长度之后,才可以读取下一套数据。

最后一个偏移量表示,每次我的指针读取完一个顶点属性后,他会回到数据开头位置,然后让其往后偏移一定数量的数据后才能继续读取下一个属性。比如当我们用了上述函数读取完位置属性之后,我们需要将指针从起始位置向后偏移3个数据长度后,才能继续读取下一组顶点属性。

这次暂时到这,估计下次更新会隔的比较久了。。

Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接的更多相关文章

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

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

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

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

  3. Opengl_入门学习分享和记录_02_渲染管线(一)顶点输入

    现在前面的废话:最近好事不断!十分开心!生活真美好! 好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍.之前介绍过,OpenGL操作的是一组3D坐标,所以我们的输 ...

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

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

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

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

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

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

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

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

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader) 代码工 ...

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

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

随机推荐

  1. python异步IO编程(一)

    python异步IO编程(一) 基础概念 协程:python  generator与coroutine 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio ...

  2. 01(a)一元函数_多元函数_无约束极值问题的求解

    1. 一元函数的极值问题  (函数光滑) 对于一个一元函数$f(x)$,怎么才能找出它的极值呢? 1.1根据定义:如果存在一点${{x}_{0}}$,在点${{x}_{0}}$的某个领域$U({{x} ...

  3. 如何正确使用Profibus插头以及终端电阻

    插头与终端电阻在Profibus通讯中有着非常重要的作用,它们使用起来非常简单,没有很多复杂的设置:但是正是由于使用简单,使得很多工程师在使用当中忽略了一些细节,导致很多通讯问题. 1 Profibu ...

  4. C++学习书籍推荐《Exceptional C++》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <Exceptional C++:47个C++工程难题.编程问题和解决方案(中文版)>中的每个问题都给出了难度系数,在这些问题中阐释一些微妙的编程 ...

  5. Java项目案例之---计算公司员工的工资(面向对象复习)

    计算公司员工的工资(面向对象复习) 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份.方法:double getSalary(int month) ...

  6. Spring WebFlux之HttpHandler的探索

    这是本人正在写的<Java 编程方法论:响应式Reactor3.Reactor-Netty和Spring WebFlux>一书的文章节选,它是<Java编程方法论:响应式RxJava ...

  7. Atlassian In Action-Jira之核心配置(二)

    道生一,一生二,二生三,三生万物. --<道德经> 如果说第一节的指导思想是管理之"道",那我们本节的核心配置就是Jira系统之"道"了.有了核心配 ...

  8. NOIP 2004 虫食算题解

    问题 E: [Noip2004]虫食算 时间限制: 1 Sec  内存限制: 128 MB 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一 ...

  9. 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的

    #### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...

  10. ZIP:GZIP

    GZIPInputStream: GZIPInputStream(InputStream in) :使用默认缓冲区大小创建新的输入流. GZIPInputStream(InputStream in, ...