美文网首页
OpenGL中的3D数学

OpenGL中的3D数学

作者: 魔杰西 | 来源:发表于2020-07-17 13:18 被阅读0次

向量篇

在3D笛卡尔坐标系中,我们通过向量(x,y,z)来确定顶点位置。

向量的模也就是我们通常所说的长度,他可以通过下图公式计算出来:

长度为1的向量我们又叫单位向量,我们可以将任一向量转化为单位向量(将x,y,z分别除以向量的模)。

向量可以进行加减计算,在OpenGL开发中,具有价值的计算就是向量的点乘和叉乘。

点乘(dot product),两个单位向量点乘会得到一个标量,即两个向量的夹角的cos值。

叉乘(cross product),两个向量叉乘会得到一个新的向量,这个向量跟原来两个向量定义的平面垂直。

在GLTools库中有一个组件叫做 Math3d,他为我们提供了很多3D数学相关api:

math3d 库中提供了了关于点乘的API

//1.m3dDotProduct3 函数获得2个向量量之间的点乘结果;

float m3dDotProduct3(const M3DVector3f u, const M3DVector3f v);

//2.m3dGetAngleBetweenVector3 即可获取2个向量量之间夹⻆角的弧度值;

float m3dGetAngleBetweenVector3(const M3DVector3f u, const M3DVector3f v);

math3d 库中提供了了关于叉乘的API

//1.m3dCrossProduct3 函数获得2个向量量之间的叉乘结果得到⼀一个新的向量量
void m3dCrossProduct3(M3DVector3f result, const M3DVector3f u, const M3DVector3f v);

矩阵篇

何为矩阵:
部分概念:

如果矩阵只有一行或者一列,既可叫做向量又可叫做矩阵。
主对角线上都是1,其余元素都为0,这样的矩阵叫做单元矩阵。
矩阵可以进行叉乘,矩阵叉乘的前提是前一个矩阵的列数等于后一个矩阵的行数。
OpenGL中,使用较多的矩阵都是一维数组创建的,且规定使用以列为主的矩阵排序。其中列向量进行了特殊的标注,表示这是以列为主的矩阵,主要体现为矩阵的最后一行都是0,只有最后一个元素为1。
OpenGL中的矩阵都是4x4的,每一列都是由4个元素组成的向量。

OpenGL中,初始化矩阵的三种方式:




矩阵相乘的理解:

线性代数角度
在数学中,顶点一般以行向量来表示,所以为了满足矩阵相乘的基本规则(前一个矩阵的列数等于后一个矩阵的行数),顶点在左,mvp在右,即:
                                                        顶点向量 = 顶点 * 模型矩阵 * 视图变换矩阵 * 投影矩阵

OpenGL维度
在OpenGL中,顶点规定以向量来表示,即顶点在右,mvp在左,同时矩阵相乘不满足交换律,mvp顺序也得相应得调整为pvm,这样的方式我们叫左乘:
                                                        顶点向量 = 投影矩阵 * 视图变换矩阵 * 模型矩阵 * 顶点

矩阵相乘源码理解:
  1. 从栈顶获取栈顶矩阵 复制到 mTemp
  2. 将栈顶矩阵 mTemp 左乘 mMatrix
  3. 将结果放回栈顶空间⾥里里。

相关文章

  • OpenGL笔记十:OpenGL ES初探

    前言 期待您移步上篇:OpenGL笔记九:3D数学小记 OpenGL ES OpenGL ES允许应⽤程序利⽤底层...

  • 02总结--010--OpenGL 基础变换:向量和矩阵的深入理

    在正式进入本章节内容之前,先来正视几个观念。 1. 3D 数学在OpenGL中充当什么角色? 对于学习OpenGL...

  • OpenGL向量、矩阵应用

    一、3D数学 3D数学.在图像图形开发中的充当了什么⻆色?对于学习OpenGL 有一个误区,就是大家认为如果不能精...

  • OpenGL中的向量和矩阵

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

  • OpenGL中的3D数学

    向量篇 在3D笛卡尔坐标系中,我们通过向量(x,y,z)来确定顶点位置。 向量的模也就是我们通常所说的长度,他可以...

  • OpenGL 之3D数学

    3D数学和图像图形的关系 对于学习OpenGL 有一个误区,就是大家认为如果不能精通那些3D图形数学知识,会让我们...

  • OpenGL 3D数学

    1.标量与向量相乘 k * [x, y, z] = [x, y, z] * k = [kx, ky, kz] 2....

  • OpenGL ES 入门之旅--OpenGL下的矩阵操作

    关于3D数学,向量的运算,矩阵的各种运算,不做特别深入的讨论,本文仅仅是对个人在学习OpenGL的过程中,用到的3...

  • OpenGL ES Android 第一课

    官网镇楼OpenGL 简介 openGL 与 OpenGL ES 区别 OpenGL 跨平台的高性能3D渲染AP...

  • OpenGL ES基础

    3D图像引擎简介 现今较为知名的3D图形引擎有OpenGL、DirectX 以及OpenGL ES,它们各自的应用...

网友评论

      本文标题:OpenGL中的3D数学

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