坐标系、视窗体(裁剪区域),存储着色器

坐标系
两种常见的投影/坐标系,正交和透视,实际上只是特定的4x4变换矩阵。啥都不规定默认的就是-1.0~1.0的笛卡尔坐标系。
正交
在opengl的核心框架下,没有提供任何内置渲染管线,所以在提交一个几何图形进行渲染之前,需要先定制一个shader。
在这里插入图片描述
透视
在这里插入图片描述
观察方向是从尖端到宽阔端。常用参数是垂直方向上的视场角度,窗口的宽度w和高度h的比值,到近截面的距离和到远截面的距离。
在这里插入图片描述
使用存储着色器
opengl的核心框架没有内置渲染管线,所以必须事先定制着色器。先学习存储着色器。
属性
每个顶点可以设置16种不同类型的参数,这些参数可以与顶点着色器中的任何制定变量关联。每个变量都使用一致的变量命名规则和相同的attribute slot.
GLShaderManager预定义的标识符
GLT_ATTRIBUTE_VERTEX ~ (x,y,z),three dimension,the position of vertex
GLT_ATTRIBUTE_COLOR ~(r,g,b,a)four dimension, color value
GLT_ATTRIBUTE_NORMAL~(x,y,z),the normal vector of surface
GLT_ATTRIBUTE_TEXTURE0~第一对2分量(s,t)纹理坐标
GLT_ATTRIBUTE_TEXTURE1~第二对2分量(s,t)纹理坐标
Uniform
要对几何图形进行渲染,我们需要为对象递交属性矩阵,但首先要绑定到我们想要使用的着色器程序上,并提供程序的Uniform值。
GLShaderManager::UseStockShader(GLenum shader,……);
……表示函数接受一个可变的参数数量。就这个函数本身而言,它根据我们选择的着色器从堆栈中提取正确的参数,这些参数就是特定着色器要求的Uniform值。(暂时不明白后面那些Uniform的值没关系,之后会学习到)

各种存储着色器

单位(Identity)着色器

默认使用笛卡尔(-1.0-1.0),每个片段应用同一种颜色,几何图形为实心和未渲染的,只使用了一个属性GLT_ATTRIBUTE_VERTEX。vColor参数传的是要求的颜色。
GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfloatv Color[4]);

平面(FLAT)着色器

将统一着色器进行了扩展,允许为几何图形变换指定一个4×4变换矩阵。典型情况下这是一种左乘模型视图矩阵和投影矩阵,经常被称作“模型视图投影矩阵”。这种着色器只是用GLT——ATTRIBUTE——VERTEX。
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfloat mvp[16], GLfloat vColor[4]);
GLT_SHADER_FLAT表示要使用的内置平面着色器类型。
mvp表示模型视图投影矩阵(Model-View-Projection Matrix),用于将场景中的三维几何形状转换为二维屏幕上的像素。它是一个4x4的浮点型数组。(这是那个uniform)
vColor表示颜色数组,用于设置每个片段的颜色。它是一个长度为4的浮点型数组,每个元素表示RGBA颜色分量的值。

上色(shaded)着色器

使用MVP矩阵(唯一的Uniform),GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_COLOR都会被使用。
GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
方便地使用内置的上色着色器来绘制一个具有光照和平滑着色的场景。着色器中唯一的Uniform值是变换矩阵,表示场景中三维几何形状的位置、方向和大小等信息。顶点着色器中会使用GLT_ATTRIBUTE_VERTEX属性来传递顶点位置信息,而片段着色器中会使用GLT_ATTRIBUTE_COLOR属性来传递顶点颜色信息,同时颜色值会被平滑地插入顶点之间,从而实现平滑着色效果。

默认光源着色器

使用内置的光照着色器来绘制一个具有光照和阴影效果的场景。该着色器使用观察者位置的单漫射光来模拟光照效果,从而产生对象的阴影和高光效果。Uniform值需要用到MV矩阵(模型视图矩阵),P投影矩阵,作为基本色的颜色值。需要的属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_NORMAL。大多数光照着色器都需要normal矩阵作为Uniform值,但是这个着色器是从MV矩阵推导除了Normal矩阵的值。方便但是低效。
GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);

点光源着色器

该着色器根据点光源的位置和物体表面的法向量计算光照强度和颜色,从而实现漫反射效果。类似默认光源着色器,但是光源位置是特定的。接受四个Uniform值,MV矩阵,P投影矩阵,视点坐标系中的光源位置,对象的基本漫反射颜色。需要用到的属性是GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_NORMAL。
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);

纹理替换着色器

通过给定的MVP矩阵,方便地使用内置的纹理替换着色器来绘制一个具有纹理贴图的场景。通过给定的MVP矩阵将场景中的三维几何形状进行变换,并使用绑定到nTextureUnit指定的纹理单元的纹理来对几何图形进行纹理贴图。片段的颜色是直接从纹理样本中获取的。需要用到的属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTR_NORMAL。
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvpMatrix[16],GLint nTextureUnit);
nTextureUnit表示要使用的纹理单元的索引,即绑定到该索引上的纹理将会应用到场景中的三维几何形状上。

纹理调整着色器

将一个基本色×一个取自纹理单元nTextureUnit的纹理,方便地绘制一个具有纹理贴图和颜色调整的场景。该着色器将一个基本颜色值(vColor)乘以从nTextureUnit纹理单元中取出的纹理,从而实现基于纹理的颜色调整效果。在着色器程序中,GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_TEXTURE0属性用于传递顶点位置和纹理坐标信息。由于该着色器同时使用了基本颜色和纹理,因此称为纹理调整着色器。所需要用到的基本属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_TEXTURE0。
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvpMatrix[16], GLfloat vColor, GLint nTextureUnit);

纹理光源着色器

将一个纹理与通过漫反射照明计算进行调整(相乘),光线在view中的位置是给定的,来绘制一个具有纹理贴图和光照效果的场景。这个着色器接受5个Uniform值,MV矩阵,P投影矩阵,视觉空间中的光源位置,几何图形的基本色,将要使用的纹理单元。需要用到的属性有,GLT_ATTRIBUTE_VERTEX、GLT_ATTRIBUTE_NORMAL和GLT_ATTRIBUTE_TEXTURE0属性用于传递顶点位置、法向量和纹理坐标信息。通过对光源位置和几何图形表面法向量的计算,该着色器可以实现基于光照的纹理贴图效果
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix, GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vBaseColor[4], GLint nTextureUnit);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值