ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenGL笔记-2.管线基本流程和各单元介绍

2020-12-08 17:57:39  阅读:235  来源: 互联网

标签:OpenGL 笔记 纹理 片元 顶点 GLT 着色器 管线


OpenGL中的管线并不是一个具体的操作,而是一系列的串行操作,大约分为两个部分:客户端和服务端,并且这两个部位是相互独立的,不仅是在代码和软件层面,即使是在硬件层面也是相互独立的

管线基本流程:

管线又细分为固定管线和可编程管线,固定管线则只提供函数调用,内部不需要管,但可编程管线则需要理解下内部的工作了,下图就是一个可编程管线的基本流程

如图所示,上层为客户端,下层为服务端最上层是自己写的代码,然后是OpenGL提供的API,需要注意的是调用服务层的是OpenGL的API并非自己写的代码

一般来说客户端往服务端传入的数据是三类Attributes(属性),Uniforms(强行翻译的话属于渲染标准),Textrue Data(纹理数据),然后进入顶点着色器,也就是图中的Vertex Shader,然后处理各个顶点(比如各个顶点在屏幕的位置等等,因为一般传入的并不是一个实际值,还有可能会有位移,光影等等),也可以加一堆着色器来深度处理,然后数据进行图元合层(所谓的图元合成就是把各种顶点绘制成点线或者三角,然后形成图形),然后到片元着色器,然后渲染出所得的图形,需要注意的是Attributes无法直接给片元着色器,只能通过处理得到,而另外两个数据是完全可以直接给片元着色器的,三个数据并不是都需要的,比如着色不用特殊的纹理,则纹理数据就不用传了

属性包括的内容,比如顶点的位置,甚至也可以传颜色光影的法线等等,但很重要的是,属性只能给顶点着色器

Uniforms(统计标准),Uniforms是不让修改的,有点类似于宏定义,可以使用很多次,但不让改,Unifroms一般是一个批次的图元处理命令,Uniforms可以直接给片元着色器传递值,比如不需要顶点处理的数据等等

纹理数据,顶点着色器主要处理的是坐标,偏数字型的数据,而不管是什么纹理,所以纹理数据一般都是给片元着色器的

可编程管线的可编程内容就是顶点着色器和片元着色器

着色器

 着色器有很多很多种,一般主要的是顶点和片元,这两个是必须的,另外还有8个是相对用的勤快的,剩下的就更冷门了,顶点和片元就不赘述了

虽然用N种着色器但使用却是没有什么太大区别

GLShaderManager shaderManager; //声明一个着色器

shaderManager.InitializeStockShaders(); //初始化一个着色器

shaderManager.UseStockShader(各种参数); //区别只在这里根据不同的着色器这里传入的参数也不一样

单元着色器  一般来说纯色就会用单元着色器,其参数值为GLT_ATTRIBUTE_VERTEX,也只能再传入一个颜色

平面着色器 一般来说放入一个图形需要变化则用平面着色器,具体的在后面详细补充,其参数是GLT_SHADER_FLAT,可以传入一个4*4的变化矩阵

上色着色器 在顶点着色器之后加入这个会填充颜色到对应的比如线的颜色,比如顶点处理过后的图形内部的填充颜色等等

默认光源着色器  一个3D更逼真,就需要各种光源,一个光源就会没那么立体,但如果有多个光源就会很立体了,但如果只有一个光源的话就会用这个,参数是GLT_SHADER_DEFAULT_LIGHT

点光源着色器 3D必备,自己设置位置,这样就很立体 参数是:GLT_SHADER_DEFAULT_LIGHT_DIEF

纹理替换矩阵 就是把纯色改变成豹纹啊什么的,毕竟单一颜色没啥意思,来点豹纹会添加点乐趣 参数是GLT_SHADER_TEXTURE_REPLACE

纹理调整着色器 适合口味比较重的朋友了,如果又想有狂野的味道,又喜欢比较单调的颜色就用这个,可以设置混合值 参数是:GLT_SHADER_TEXTURE_MODULATE

纹理光源着色器 把上面的全部混合起来,几乎所有参数都可以传,超高度定制化了参数是GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF

即图片单元是所有图形的最小单元,之前说过只有点,线和三角形,点不说了,线在3D下可以是个3D的线环,三角形则能构成很多2D3D的图形

点 点设置大小的唯一方式就是gl_PoingSize = xx.f,然后就是坐标位置还有各种着色器去上色

线 线也没啥好说的两个或者多个坐标(多个点叫线带),如果再闭合就是线环,如果坐标和宽度设置到位,线环其实就像个戒指,然后线的宽度glLineWidth(xx.f)也是唯一的修改办法

三角形 三角形有且只能有三个顶点,多的话会变成单独的点线或者三角,而很多模型都是多个三角形拼凑的

标签:OpenGL,笔记,纹理,片元,顶点,GLT,着色器,管线
来源: https://blog.csdn.net/yokan_de_s/article/details/110874931

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有