OpenGL渲染结构
基础图形管线
OpenGL渲染架构.jpg客户机-服务器
客户机存储在CPU存储器中,并且在应用程序中执行,或者在驱动程序中执行。驱动程序将渲染命令与数据组合起来,并发送到服务器执行。实际上,服务器就是图形加速卡上的硬件和内存。
传递渲染数据方法
-
属性(attirbutes)
顶点数据、投影矩阵、模型矩阵、纹理坐标等
-
Uniform值
变化矩阵,通道,颜色值
-
纹理(TextureData)
纹理数据,一般都是直接传递给片元处理器(Vertex Shader)
着色器文件类型
-
.vsh
顶点着色器代码 -
.fsh
片元着色器代码
投影方式
正投影
通常在2D绘图中使用正投影。在正投影中,所有在这个空间范围内的所有东西都会被显示在屏幕上。
GLFrustum::SetOrthographic(GLfloat xMin,GLfloat xMax,GLfloat yMin,GLfloat yMax,GLFloat zMin,GLfloat zMax);
透视投影
通常在立体绘图中使用透视投影。透视投影会进行透视除法对距离观察者很远的对象进行缩短和收缩。GLFrustum类 通过调用SetPerspective
方法为我们构建一个平截头体。
GLFrustum::SetPerspective(float fFov,float fAspect,float fNear,float fFar);
着色器
固定着色器
-
单元着色器
GLT_SHADER_IDENTITY
使用场景:绘制默认笛卡尔坐标系(-1,1)。图形所有片段都会以一种颜色填充。GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
-
平面着色器
GLT_SHADER_FLAT
使用场景:在绘制图形时,可以应用4*4变化矩阵(模型/投影变化)。GLShaderManager::UseStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
-
上色着色器
GLT_SHADER_SHADED
使用场景:在绘制图形时,可以应用4*4矩阵变化(模型/投影变化),颜色将会平滑地插入到顶点之间(称为平衡着色)。GLShaderManager::UseStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
-
默认光源着色器
GLT_SHADER_DEFAULT_LIGHT
使用场景:在绘制图形时,可以应用4*4矩阵变化(模型/投影变化),将会使绘制的图形产生阴影和光照的效果。需要模型视图矩阵、投影矩阵和作为基本色的颜色值。GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
-
点光源着色器
GLT_SHADER__LIGHT_DIEF
使用场景:在绘制图形时,可以应用4*4矩阵变化(模型/投影变化),将会使绘制的图形产生阴影和光照的效果,区别是光源位置是特定的。GLShaderManager::UseStockShader(GLT_SHADER__LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
-
纹理替换矩阵着色器
GLT_SHADER_TEXTURE_REPLACE
使用场景:在绘制图形时,可以应用4*4矩阵变化(模型/投影变化),使用纹理单元来进行颜色填充,其中每个像素点的颜色是从纹理中获取。GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
-
纹理调整着色器
GLT_SHADER_TEXTURE_MODULATE
这种着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理。GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULAT,GLfloat mvMatrix[16],GLfloat vColor,GLint nTextureUnit);
-
纹理光源着色器
GLT_SHADER__TEXTURE_POINT_LIGHT_DIEF
这种着色器将一个纹理通过漫反射照明计算进行调整,光线在视觉空间中的位置是给定的。GLShaderManager::UseStockShader(GLT_SHADER__TEXTURE_POINT_LIGHT_DIEF,GLfloat mvMatrix,GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
网友评论