您的位置:首页 > 其它

模型视图矩阵

2014-09-02 16:20 204 查看
模型视图矩阵式一个4X4矩阵,他表示变换后的坐标系,我们可以用来防置对象和确定对象额方向。我们为图元的顶点将作为一个单位矩阵(也就是一个向量)的形式来使用,并乘以一个模型视图矩阵来获得一个相对于视觉坐标系的经过变换的新坐标。

---------- 矩阵构造

OpenGL 表示矩阵采取列有限排序,所以用4X4矩阵表示为一个有16个浮点值组成的单个数组。

前3列的前3个元素只是方向向量,它们表示空间中X轴、y轴和Z轴上的方向(在这里用向量表示一个方向)。对于大多数应用来说,这3个向量相互之间总是称90度,并且通常为单位长度(除非我还应用了缩放或裁剪)。这种情况下地数学术语叫做标准正交(向量为单位长度)或正交(向量不是单位长度)。

-----------单位矩阵

将一个向量乘以一个单位矩阵,就相当于用这个向量乘以1,不会发生任何改变。

OpenGL 生产单位矩阵

GLfloat m[] = {

.........

}

math3d 的M3DMatrix44f

M3DMatrix44f m = {

........

}

P101 有解释

void m3dLoadIdentity44(M3DMatrix44ff m);

-------------平移

平移矩阵仅仅是将我们的顶点沿着3个坐标轴中的一个或多个进行平移。

math3d 库的这个函数来平移变换

void m3dTranslationMatrix44(M3DMatrix44f m,float x,float y,float z);

-------------旋转

为了将一个对象沿着3个坐标轴中的一个或者任意向量进行旋转,需要找到一个旋转矩阵。math3d 库中又一个方法帮助我们

m3dRotationMatrix44(M3DMatrix44f m,float angle,float x,float y,float z);

在这里,我们围绕一个有x、y和z变量指定的向量进行旋转。旋转地角度沿逆时针方向安装弧度极端,有变量angle指定。在最简单的情况下,旋转只是围绕坐标系的一个坐标轴(x、y和z)进行旋转。

我们还可以围绕任意一个有x、y和z变量指定的向量来进行旋转。要表示这个旋转轴,我们值要绘制一条丛原点到由(x、y和z)表示的点的线段就可以了。

M3DMatrix44f m;

m3dRotationMatrix(m3dDegToRad(45.),1.0f,1.0f,1.0f); 创建一个旋转矩阵,可以使顶点沿着有(1,1,1)指定的旋转轴旋转45度。

m3dDegToRad这个宏将角度值转换为弧度值,因为和计算机不同,大多数程序员比较习惯以角度进行思考。使用这个宏代替内联函数的一个好处是,如果这个值是硬编码的文字,转换将发生在编译时,这样角度和弧度之间的转换就不会产生运行时损失。

----------缩放

math3d 库

M3DMatrix44f m;

void m3dScaleMatrix44(M3DMatrix44f m ,float xScale,float yScale,float zScale);

-----------综合变换

“连接”concatenate 来表示两种变换以这种方式结合。不过在矩阵乘法中又一个小陷进需要注意,就是运算的顺序是由影响的。

math3d 库函数m3dMatrixMultiply44 用来将两个矩阵相乘并返回运算结果。

void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a ,const M3DMatrix44f b);

----------- 运用模型视图矩阵

P104 使用平面着色器,接受4X4变换矩阵作为它的参数之一。

m3dTranslationMatrix44 创建平移矩阵

m3dRotationMatrix44 创建旋转矩阵

m3dMatrixMultiiply44 矩阵相乘

shaderManager.useStockShader(GLT_SHADER_FLAT,mFinalTranform,vRed); 使用存储着色器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: