一,基础管线
我们敲的代码就是Application Code,代码走的是OpenGL的API(到这里都称为客户端),然后OpenGL的API去走固定管线,传入的数据有属性,文理数据和unforms,他们都可以进入顶点着色器,但并不一定都有数据。
二,属性
就是一个顶点的数据元素,实际上,顶点位置就是一个属性,属性是浮点型,整形,布尔型等。属性只会传递给顶点着色器,不能直接传递给片元着色器。如果你非要用属性来传递,那么就直接先传入顶点着色器,在从顶点着色器一层一层往下传递。
三,uniforms
批次命令,该变量实际上可以无限次使用。设置一个用于表面的颜色值,也可以是时间值。
他是可以直接传递给片元着色器。他可以针对性的传递。
四,文理数据
后面单独来个文章,内容较多。
上次说了,固定管线我们只需要填充数据,无法进行编程。
可编程管线也只是对顶点着色器和片元着色器进行编程,所以,这张图的其他地方都是底层去处理了。我们也没有办法进行操作和剖析。
五,投影方式
投影方式为:平面图形/3维图形
正投影针对二维图形
透视投影针对的是三维图形
透视投影:
视场角度---可以理解为眼镜大小
纵横比------宽高比
fNear/fFar---确定投影的位置在哪
通过以上的几个参数,可以计算出所需要的其他数据。
六,固定管线中已存在的着色器
单位着色器,平面着色器,上色着色器,默认光源着色器,点光源着色器,纹理替换着色器,纹理调整着色器,纹理光源着色器。
他们的常用代码(都是同一个使用方法,只是参数列表传入的参数不同使用的着色器不同):
1.定义着色器 GLShaderManager shaderManager;
2.初始化着色器 shaderManager.initalizeStockShaders();
3.使用 shaderManager.userStockManager(参数列表);
参数列表:
单位(Identity 着色器)
GLShaderManager::UserStockShader(GLT_ATTRIBUTE_VERTEX,GLfloat
vColor[4]);
单位着⾊色器器:只是简单地使⽤用默认笛卡尔坐标系(坐标范围(-1.0,1.0))。所有的⽚片段都应⽤用同⼀一种颜⾊色,⼏几何图形为 实⼼心和未渲染 的。
需要设置存储着色器⼀一个属性:
GLT_ATTRIBUTE_VERTEX(顶点分 量量)
参数2:vColor[4],你需要的颜色
平面着色器
参数1:平面着色器 参数2:允许变化的4*4矩阵 参数3:颜色
它将统⼀着色器进行了拓展。允许为⼏几何图形变换指定⼀一个 4 * 4 变换矩 阵。经常被称为“模型视图投影矩阵”在第四次课会详细讲到
上色着色器
在几何图形中应用的变换矩阵。
需要设置存储着色器的
GLT_ATTRIBUTE_VERTEX(顶点分量) 和
GLT_ATTRIBUTE_COLOR(颜色分量) 2个属性。颜⾊色值将被平滑地插⼊入顶 点之间(平滑着⾊色)
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[1
6],GLfloat vColor[4]);
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp
[16]);
默认光源着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfl
oat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
参数1:默认光源着⾊器 参数2:模型视图矩阵 参数3:投影矩阵 参数4:颜⾊色值
这种着⾊器,是对象产生阴影和光照的效果。 需要设置存储着⾊器的 GLT_ATTRIBUTE_VERTEX(顶点分量量) 和GLT_ATTRIBUTE_NORMAL(表⾯面法线)
点光源着⾊器
参数1:点光源着⾊器 参数2:模型视图矩阵 参数3:投影矩阵 参数4:视点坐标光源位置 参数5:颜⾊色值
点光源着⾊器和默认光源着⾊器很相似,区别在于:光源位置是特定的。 同样需要设置存储着⾊器的 GLT_ATTRIBUTE_VERTEX(顶点分量量) 和
GLT_ATTRIBUTE_NORMAL(表⾯面法线)纹理理替换矩阵
着⾊色器器通过给定的模型视图投影矩阵,使⽤用绑定到 nTextureUnit (纹理理 单元) 指定纹理理单元的纹理理对几何图形进行变化。 ⽚片段颜⾊色:是直接从纹理样本中直接获取的。
需要设置存储着⾊器的
GLT_ATTRIBUTE_VERTEX(顶点分量) 和
GLT_ATTRIBUTE_NORMAL(表⾯面法线)
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT_DIEF
,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3]
,GLfloat vColor[4]);
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GL
float mvMatrix[16],GLint nTextureUnit);
纹理理调整着⾊器
将⼀一个基本⾊色 乘以 ⼀一个取⾃纹理单元 nTextureUnit 的纹理。 需要设置存储着⾊器的 GLT_ATTRIBUTE_VERTEX(顶点分量) 和
GLT_ATTRIBUTE_TEXTURE0(纹理理坐标)
纹理理光源着⾊器
将⼀一个纹理理通过漫反射照明计算机进行调整(相乘)。光线在视觉空间中 的位置是给定的。
需要设置存储着⾊器的
GLT_ATTRIBUTE_VERTEX(顶点分量) 和
GLT_ATTRIBUTE_TEXTURE0(纹理坐标)、GLT_ATTRIBUTE_NORMAL(表面法 线)
参数1:纹理光源着⾊器 参数2:投影矩阵 参数3:视觉空间中的光源位置 参数4:几何图形的基本⾊ 参数5:将要使用的纹理单元
七,7种常见图元
图元就是默认写好的集合:
点,线,线带,线环,三角形,三角形金字塔,三角形带,三角形扇
以上几种图元的代码可以下载看看。