一 向量
1.向量声明
gltool 库下的math3d库有俩个数据类型,能够表示一个三维或四维向量
声明一个三维向量 M3DVector3f 变量名={x,y,z}
声明一个四维向量 M3DVector4f 变量名={x,y,z,w} 第四个分量w 为缩放值
现在我们声明一个三分量顶点数组,生成一个三角行 声明一个三维向量 M3DVector3f 变量名[]={-0.5f,0.0f,0.0f 0.5f,0.0f,0.0f 0.0f,0.5f,0.0f
}
2.点乘
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v)
若是俩单位向量 返回俩向量 夹角余弦值
float m3dGetAngleBetweenVectors3(const M3DVector3f u,const M3DVector3f v)
返回俩向量夹角弧度值
3.叉乘
void m3dCrossProduct3(M3DVextor3f result,const M3DVector3f u,const M3DVector3f v)
二.矩阵
声明 M3DMatrix33f 变量名; 3*3矩阵
M3DMatrix44f 变量名; 4*4矩阵
三.变换
1.视图变换
视图变换是应用到场景的第一种变换,相当于变换观察者的位置
2.模型变换
就是操作对象(3d图形等)主要进行平移,旋转,缩放。
3.模型视图的二元性
移动观察者的位置,和改变模型的位置,在最终图形效果上是一样,所以可以把二者组成一体。
4.投影变换
是在模型视图变换之后应用的,简单来说最后将图形绘制到屏幕上。
四.模型视图矩阵
简单说 就是将一个顶点(向量)乘 模型视图矩阵,得到新的向量,就为这个顶点变换后的结果
1.生成平移矩阵
void m3dTranslationMatrix44(M3DMatrix44f m,float x,float y, float z);
2.生成旋转矩阵
void m3dRotationMatrix44(M3DMatrix44f m,float angle,float x,float y, float z);
延着(x,y,z)方向 旋转angle角度
m3dDegToRad(45.0)将角度值转换为弧度值
3.生成缩放矩阵
void m3dScaleMatrix44(M3DMatrix44f m,float x,float y, float z); x,y,z 缩放大小
4.获得综合矩阵
void m3dMatrixMultiply44(M3DMatrix44f product,const M3DMatrix44f a, const M3DMatrix44f b);
5.运用模型视图矩阵
GLShaderManager::UseStockShader(GLT_SHADER_FLAT,M3DMatrix44f m,GLfloat vColor[4])
应用平面着色器
五.更多对象
1.使用三角形批次
GLTriangleBatch 变量名;
变量名.BeginMesh(200); 最多打算使用的顶点数
2.创建球体批次
void gltMakeSphere(GLTriangleBatch& shereBatch,GLfloat fRadius,GLint iSlices,GLint iStacks);
3.创建一个花环
void gltMakeTorus(GLTriangleBatch& shereBatch,GLfloat majorRadius,GLfloat minorRadius,GLint iSlices,GLint iStacks);
4.创建一个圆柱或圆锥
void gltMakeSphere(GLTriangleBatch& shereBatch,GLfloat baseRadius,GLfloat topRadius,GLfloat fLength,GLint iSlices,GLint iStacks);
六.投影矩阵
1.模型视图投影矩阵
m3dMatrixMultiply44(mModelViewProjection,viewFrustum.GetProjectionMatrix(),mModelview)
七.变换管线
1.使用矩阵推栈
管理矩阵的类
GLMatrixStack::GLMatrixStack(int iStackDepth=64) 默认为64个深度
载入任何矩阵
LoadMatrix(const M3DMatrix44f m)
一个矩阵乘以推栈顶部的矩阵,得到的结果存储在推栈顶部
voidGLMatrixStack::MultMatrix(constM3DMatrix44f )
获得矩阵顶部的值
voidGLMatrixStack::GetMatrix(constM3DMatrix44f m)
压栈于出栈
压栈操作存储一个矩阵状态,出栈操作恢复这个状态
压栈
void GLMatrixStack::PushMatrix(void)
void PushMatrix(GLFrame& frame)
出栈
void GLMatrixStack::PopMatrix(void)
仿射变换
void MatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y,GLfloat z) 旋转
void MatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z) 平移
void MatrixStack::Scale(GLfloat x,GLfloat y,GLfloat z) 缩放
2.管理管线
GLGeometryTransform 类 来管理多个管线
变量名.SetMatrixStack(矩阵推栈名,矩阵推栈名) 设置变换管线以使用俩个矩阵推栈