OpenGL/OpenGL ES学习记录

OpenGL中向量、矩阵相关基础变化理解

2019-05-18  本文已影响0人  jakeXu

为什么要理解这些基础变化

根据我的观察,大家在学习OpenGL的时候有一个误区,就是认为如果不能精通那些3D图形数学知识,就会让我们寸步难行。其实不然,就像我们不需要懂得任何关于汽车结构和内燃机方面的知识也能开车。但是,我们最好能对汽车有足够的了解,以便我们意识到什么时候需要更换机油、定期加油、汽车常规保养工作。同样要成为一名可靠和有能力的OpenGL程序员,至少需要理解这些基础知识,才知道能做什么?以及哪些工具适合我们要做的工作。初学者,经过一段时间的实践,就会渐渐理解矩阵和向量。并且培养出一种更为直观的能力,能够在实践中充分利用所学的内容。

基础变化的介绍

大家现在还明不明⽩向量、矩阵是什么?有没有能力在脑海中默算出2个矩阵的乘法?以及这些矩阵对 OpenGL意味着什么?
GLTools 库中有一个组件叫Math3d,其中包含了大量好用的OpenGL 一致的3D数学和数据类型。虽然我们不必亲自进行所有的矩阵和向量的操作,但要知道它们是什么?以及如何运用它们。

math3d库,有2个数据类型,能够表示一个三维或者四维向量。M3DVector3f可以表示一个三维向量(x,y,z),而M3DVector4f则可以表示一个四维向量(x,y,z,w).在典型情况下,w坐标设为1.0。x,y,z值通过除以w,来进⾏行缩放。⽽除以1.0则本质上不改变x,y,z值。

typedef float M3DVector3f[3];
typedef float M3DVector4f[4];
M3DVector3f vVector;//声明一个三分量向量操作
M3DVector4f vVectro= {0.0f,0.0f,1.0f,1.0f} ;//声明一个四分量的操作:
//声明一个三分量顶点数组,例如生成一个三角形
M3DVector3f vVerts[] = {
};
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f
};

(1)向量点乘

//实现点乘方法:
//⽅法1:返回的是-1,1之间的值。它代表这2个向量的余弦值。
float m3dDotProduct3(const M3DVector3f u,const
M3DVector3f v);
//⽅法2:返回2个向量之间的弧度值。
float m3dGetAngleBetweenVector3(const M3DVector3f
u,const M3DVector3f v);

(2)向量叉乘

//实现叉乘方法:
//result 为法向量
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f
u ,const M3DVector3f v);

矩阵.png

typedef float M3DMatrix33f[9];
typedef float M3DMatrix44f[16];
M3DMatrix44f mCamera;//定义4*4矩阵

(2)顶点变换管线,如下图:


顶点变换管线.png

从顶点变换管线图可以看到,顶点数据是通过不同的矩阵变换最后显示到窗口上的,那么这个过程中我们需要用到哪些矩阵相关的工具呢,下面我们就来了解矩阵相关的工具。

以上有不正确的地方欢迎留言指出,有问题随时联系,有需要补充的也可以提出,谢谢。

上一篇下一篇

猜你喜欢

热点阅读