opengl学习(一)

匿名 (未验证) 提交于 2019-12-03 00:22:01

顶点着色器 

几何着色器 

光栅化,剪切 

片段着色器 

      片段着色器的主要目的是计算像素的最终颜色,这通常是所有高级OpenGL效果出现的阶段。通常片段着色器包含有关3D场景的数据,它可以用来计算最终的像素颜色(如灯光,阴影,光线颜色等)。

alpha测试和混合阶段

在确定了所有相应的颜色值之后,最终的对象将通过另一个阶段,我们称之为alpha测试和混合阶段。该阶段检查片段的相应深度(和模版)值(我们稍后会获取),并使用它们来检查结果片段是在其他对象的前面还是后面,并且应该相应地丢弃。该阶段还检查alpha值(alpha值定义对象的不透明度)并相应地混合对象。因此,即使在片段着色器中计算像素输出颜色,最终的像素颜色在渲染多个三角形时仍可能完全不同。


如您所见,图形管线相当复杂,并且包含许多可配置的部分。 但是,对于几乎所有的情况,我们只需要使用顶点和片段着色器。 几何着色器是可选的,通常保留为其默认着色器。

glBufferData()是专门用于将用户定义数据复制到当前绑定缓冲区的功能。

它的第一个参数是我们想要将数据复制到的缓冲区的类型:当前绑定到GL_ARRAY_BUFFER目标的顶点缓冲区对象。

 第二个参数指定了我们想要传递给缓冲区的数据大小(以字节为单位) 一个简单的顶点数据就足够了。 

第三个参数是我们想要发送的实际数据                第四个参数指定我们希望显卡如何管理给定的数据。

GL_STATIC_DRAW:数据很可能根本不会改变或很少改变。
GL_DYNAMIC_DRAW:数据可能会改变很多。

GL_STREAM_DRAW:数据每次绘制时都会改变。

三角形的位置数据不会改变,并且对于每个渲染调用都保持不变,因此其使用类型最好是GL_STATIC_DRAW。 例如,如果一个缓冲区的数据可能会频繁变化,那么GL_DYNAMIC_DRAW或GL_STREAM_DRAW的使用类型可确保图形卡将数据放入内存,以便进行更快速的写入。

glShaderSource()

函数将着色器对象编译为第一个参数。 

第二个参数指定我们作为源代码传递了多少个字符串,这只是一个。 

第三个参数是顶点着色器的实际源代码,我们可以将第四个参数保留为NULL。

通常,当你想要绘制多个对象时,首先生成/配置所有的VAO(以及所需的VBO和属性指针)并将其存储起来供以后使用。当我们想绘制一个物体时,我们采取相应的VAO,将其绑定,然后绘制物体并再次解除VAO的绑定。


GLSL中的矢量是1,2,3或4个组件容器,适用于刚刚提到的任何基本类型。 他们可以采取以下形式(n代表组件的数量):

vecn:n个浮点的默认向量。

bvecn:n个布尔值的矢量。

ivecn:n个整数的向量。

uvecn:n个无符号整数的向量。

dvecn:n个双重组件的向量。

大多数时候我们会使用基本的vecn,因为浮点数对于我们大部分的用途来说已经足够了。

可以通过vec.x访问矢量的组件,其中x是矢量的第一个组件。 您可以使用.x,.y,.z和.w分别访问它们的第一,第二,第三和第四个组件。 GLSL还允许您使用RGB颜色或STPQ纹理坐标,访问相同的组件。矢量数据类型允许一些有趣且灵活的组件选择,称为swizzling。







转载请标明出处:opengl学习(一)
文章来源: opengl学习(一)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!