OpenGL 学习笔记(三) 基础变换

一 向量

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)

七.变换管线

94c06485c43045b6a8637fb25312dbe4.jpg

 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(矩阵推栈名,矩阵推栈名)      设置变换管线以使用俩个矩阵推栈

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值