1. 创造金字塔批次类
GLBatch pyramidBatch;
MakePyramid(pyramidBatch);
2.参数传递方法回顾
void MakePyramid(GLBatch& pyramidBatch) {
}
3.通过pyramidBatch组建三角形批次
/* 参数1:类型
参数2:顶点数
参数3:这个批次中将会应用1个纹理
注意:如果不写这个参数,默认为0。
*/
pyramidBatch.Begin(GL_TRIANGLES, 18, 1);
4.设置法线
// void Normal3f(GLfloat x, GLfloat y, GLfloat z);
//Normal3f:添加一个表面法线(法线坐标 与 Vertex顶点坐标中的Y轴一致)
// 表面法线是有方向的向量,代表表面或者顶点面对的方向(相反的方向)。在多数的光照模式下是必须使用。
pyramidBatch.Normal3f(X,Y,Z);
5.设置纹理坐标
// void MultiTexCoord2f(GLuint texture, GLclampf s, GLclampf t);
// 参数1:texture,纹理层次,对于使用存储着色器来进行渲染,设置为0
// 参数2:s:对应顶点坐标中的x坐标
// 参数3:t:对应顶点坐标中的y
(s,t,r,q对应顶点坐标的x,y,z,w)
pyramidBatch.MultiTexCoord2f(0,s,t);
6. 向三角形批次类添加顶点数据(x,y,z);
//void Vertex3f(GLfloat x, GLfloat y, GLfloat z);
// void Vertex3fv(M3DVector3f vVertex);
pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f);
7.点光源着色器
/*
参数1:GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF(着色器标签)
参数2:模型视图矩阵
参数3:投影矩阵
参数4:视点坐标系中的光源位置
参数5:基本漫反射颜色
参数6:图形颜色(用纹理就不需要设置颜色。设置为0)
*/
shaderManager.UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
transformPipeline.GetModelViewMatrix(),
transformPipeline.GetProjectionMatrix(),
vLightPos, vWhite, 0);
代码地址:https://gitee.com/xgkp/basic_texture_60.git
网友评论