2019-02-14 初识OpenGL----基础2

一,基础管线

我们敲的代码就是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种常见图元

图元就是默认写好的集合:

点,线,线带,线环,三角形,三角形金字塔,三角形带,三角形扇

以上几种图元的代码可以下载看看。

你可能感兴趣的:(2019-02-14 初识OpenGL----基础2)