单元着色器
GLShaderManager::UserStockShader(GL_SHADER_IDENTITY, GLfloat, vColor[4]);
参数1: 存储着色器种类- 单元着色器
参数2: 颜色
使用场景:绘制默认OpenGL坐标系(-1,1)下图形。图形所有片段都会以一种颜色填充
平面着色器
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLflot mvp[16], GLfloat vColor[4]);
参数2: 允许变化的4*4矩阵
参数3: 颜色
使用场景: 在绘制图形时,可以应用变换(模型/投影变换)
上色着色器
GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
参数2: 允许变化的4*4矩阵
使用场景:在绘制图形时,可以应用变换;颜色会平滑地插入到顶点之间称为平滑着色
默认光源着色器
GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:颜色值
使用场景:在绘制图形时,可以应用变换;这种着色器会使绘制的图形产生阴影和光照的效果
点光源着色器
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源的位置
参数5:漫反射颜色值
使用场景:在绘制图形时,可以应用变换;这种着色器会使绘制的图形产生阴影和光照的效果,与默认光源的区别是光源位置可以设置
纹理替换矩阵着色器
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);
参数2:模型4*4矩阵
参数3:纹理单元
使用场景:在绘制时可以应用变换;这种着色器通过给定的模型视图投影矩阵,使用纹理单元进行颜色填充,其中每个像素点都是从纹理中获取
纹理调整着色器时
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvMatrix[16], GLfloat vColor[4], GLint nTextureUnit);
参数2:模型4*4矩阵
参数3:颜色值
参数4:纹理单元
使用场景:在绘制时可以应用变换;这种着色器通过给定的模型视图投影矩阵;着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行颜色混合后才填入到片段中
纹理光源着色器
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix[16],GLfloat pMatrix[16], GLfloat vLightPos[3] GLfloat vBaseColor[4], GLint nTextureUnit);
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源位置
参数5:颜色值(几何图形基本色)
参数6:纹理单元
使用场景:在绘制时可以应用变换;这种着色器通过给定的模型视图投影矩阵,着色器将一个纹理通过漫反射照明计算进行调整(相乘)
图元
基本图元.png 基本图元2.png批次类Batch
一个简单的容器类,用于绘制图形
void GLBatch::Begin(GLenum primitive, GLuint nVerts, GLuint nTextureUnits = 0);
参数1:图元
参数2:顶点数
参数3:多少组纹理坐标(可选)
//复制顶点数据(一个由3分量x,y,z顶点组成的数组)
void GLBatch::CopyVertexData3f(GLfloat *vVerts);
//复制表面法线数据
void GLBatch::CopyNormalDataf(GLfloat *vNorms);
//复制颜色数据
void GLBatch::CopyColorData4f(GLfloat *vColors);
//复制纹理坐标数据
void GLBatch::CopyTexCoordData2f(GLfloat *vTex, GLuint uiTextureLayer)
//结束数据复制
void GLBatch::End(void);
//绘制图形
void GLBatch::Draw(void);
//设置法线
void GLBatch::Normal3f(GLfloat x, GLfloat y, GLfloat z);
//设置纹理坐标
void GLBatch::MultiTexCoord2f(GLuint texture, GLclampf s, GLclampf t);
//添加顶点数据
void GLBatch::Vertex3fv(M3DVector3f vVertex);
投影
正投影.png透视投影.png
GLFrustum类通过SetPerspective方法为我们构建一个平截头体.
GLFrustum::void SetPerspective(float fFov, float fAspect, float fNear, float fFar)
*fFov: 垂直方向上的视场角度
*fAspect: 窗口的宽度与高度的纵横比
*fNear: 近截面的距离
*fFar: 远截面的距离
Example:
//设置投影方式
viewFrustum.SetPerspective(35.0f, float(w) / float(h), 1.0f, 500.0f);
//将投影矩阵加入堆栈
projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
网友评论