美文网首页OpenGL
OpenGL中的向量和矩阵

OpenGL中的向量和矩阵

作者: iOSer_jia | 来源:发表于2020-07-17 11:45 被阅读0次

OpenGL坐标变化时经常用到矩阵来计算变化后点的位置,为了更好的理解3D数学在OpenGL中的作用,本文将简单地介绍一些概念。

向量

在3D笛卡尔坐标系中,一个坐标为(x, y, z)的顶点就是坐标系中的位置,坐标系每个位置都有一个唯一的坐标与之对应,一个xyz坐标我们可以认为他是一个有几何意义(在坐标轴中的位置),有模(到原点的的距离)的一个向量。
向量的模计算公式为:
m = \sqrt{ x^2 + y^2 + z^2 }

这个公式可以通过勾股定理求的

单位化向量

我们将模为1的向量(即m=1)成为单位向量,将一个向量缩放至模为1,这个过程称为标准化向量,也称为单位化向量

由以上公式可以推导出单位化向量的公式为:
(\dfrac{x}{m}, \dfrac{y}{m}, \dfrac{z}{m})

m 为向量的模

向量点乘

点乘也叫数量积,它的结果代表意义是一个向量在另一个向量方向上的投影,是一个标量。


点乘.png

公式为:
A·B = |A||B|cosθ

如果向量A和向量B均为单位向量,那么A·B = cosθ,所以,两个单位向量的点乘结果是它们之间的夹角值的余弦值,范围为[-1, 1]。

OpenGL中可以用 float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v); 函数获得两个向量的点乘结果,也可以用 float m3dGetAngleBetweenVector3(const M3DVector3f u,const M3DVector3f v); 得到两个向量之间夹角的弧度值

向量叉乘

点乘也叫向量积,它的结果代表的几何意义是一个和两个向量都垂直的向量,向量的模长是两个向量组成的平行形的面积。

叉乘.png
它的公式为:

OpenGL中可以用void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u ,const M3DVector3f v);得到两个的叉乘结果。

矩阵

矩阵在数学中的定义是一个按照长方阵列排列的复数或实数集合,在OpenGL中我们经常用来计算物体位置或旋转后的位置。
OpenGL中经常使用以为数组表示一个矩阵(因为OpenGL是使用以列为主的矩阵排序的),

行优先和列优先

如下图,一个矩阵按照从左往右排序的称为行优先矩阵排序,从上往下的称为列优先矩阵排序。

行优先和列优先

矩阵的叉乘

矩阵的相乘是有规则,一个m*n矩阵只能和n*x的矩阵相乘,得到的结果是一个m*x的矩阵,从这里也可以看出矩阵相乘不满足交换律。

矩阵变换顶点的奥秘

一个4*4的矩阵,可以表示三维空间中x,y,z,w要变化的位置和方向。


4*4矩阵.png

列向量进行了特别标注:矩阵的最后一行都为0,只有最后一个元素为1

OpenGL一个4*4的矩阵中,每一列都表示一个向量,如果将一个物体的所有顶点乘以一个这个矩阵,从叉乘的性质可以知道每个顶点表示的向量将会得到一个新的向量,从而变化到另一个给定的位置和方向。

矩阵的使用

平移

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

旋转

M3DMatrix44f m3dRotationMatrix44(m3dDegToRad(45.0), floata x, float y, float z);

缩放

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

综合变化

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

更多关于OpenGL中的矩阵和矩阵堆栈可以参考OpenGL的常见矩阵和变化

相关文章

  • OpenGL--向量和矩阵

    在我们OpenGL中涉及到图形变换的时候经常会运用到向量/矩阵的运算。今天我们就来了解下OpenGL中的向量、矩阵...

  • OpenGL中的向量和矩阵

    OpenGL坐标变化时经常用到矩阵来计算变化后点的位置,为了更好的理解3D数学在OpenGL中的作用,本文将简单地...

  • OpenGL中向量和矩阵浅析

    向量 向量:在3D笛卡尔坐标系中,一个顶点就是由XYZ定义的,这样的顶点就是向量。(有方向的点就是向量)向量长度(...

  • OpenGL中的向量、矩阵

    一、向量 1.概念 在3D笛卡尔坐标系,基本上一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置,恰...

  • OpenGL中的向量,矩阵

    一.向量 如图: 在3D笛卡尔坐标系中,A点在XYZ轴上对应的位置分别为OC,OD,OB,在X轴上,我们用X(蓝色...

  • OpenGL中的向量、矩阵

    向量 了解向量之前,先了解什么是标量 标量:只有大小,例如:1,12,13等 向量是有方向的标量,即不仅有大小,还...

  • 十三 OpenGL中的向量和矩阵

    1 向量 1.1 向量的定义 坐标系中的一个坐标(x,y,z),即从坐标原点(0,0,0)指向(x,y,z)的一个...

  • OpenGL 的向量和矩阵

    GLTools库中有一个组件叫Math3d,其中包含了大量好用的OpenGl含有3d数学和数据类型。在开发过程中我...

  • OpenGL 向量、矩阵

    向量 在坐标系上,一个顶点就是X,Y,Z坐标空间的一个位置。由一个单独的XYZ定义的这样就是向量。 单位向量 向量...

  • OpenGL向量、矩阵

    向量 在 3D 笛卡尔坐标系, 基本上一个顶点就是XYZ 坐标空间上的⼀个位置。而在空间中给定的一个位置恰是由一个...

网友评论

    本文标题:OpenGL中的向量和矩阵

    本文链接:https://www.haomeiwen.com/subject/bgfghktx.html