3D数学基础 简要归纳
OpenGL + OpenGL ES +Metal 系列文章汇总
- 计算机图形学第一准则:看上去是对的就是对的,简单记为
近似原则
- OpenGL是基于3D的,屏幕是2D的
- OpenGL中使用的是列向量
左手系&右手系
- OpenGL更多的是基于左手系
- 线性代数更多是基于右手系
- 3D图形学中常用坐标系
- 世界坐标系:系统的绝对坐标系
- 物体坐标系:物体产生关联
- 摄像机坐标系/照相机坐标系
- 惯性坐标系:物体坐标系转换为世界坐标系的 “半途”,目的是为了减少复杂度,是一个过渡
- eg:以下情景基于什么坐标系?
- 书在我的
西边
还是北边
?==> 东南西北 – 世界坐标系 - 计算机在我的
前面
还是后面
?==> 上下左右 – 物体坐标系 - 从一个房间移动到另一个房间 ==> 寻路型 – 世界坐标系
- 你能
看见
我的计算机吗? ==> 摄像机坐标系
- 书在我的
向量
存储 – 数组
图形学中:最多到4维
- 2D:x、y
- 3D:x、y、z
- 4D:x、y、z、w
零向量:没有方向,没有长度 即 模 = 0
负向量 = (-1).向量, 将向量中的每个数都乘以 -1
- 几何意义:得到一个与原向量
大小相等,方向相反
的向量
- 几何意义:得到一个与原向量
向量大小计算 即 模的计算 = 向量中所有数的平方和,再求根号
- 2D向量几何意义:直角三角形最长边的边长
- 2D向量几何意义:直角三角形最长边的边长
标量与向量的运算
总结- 标量不能与向量进行加减运算
- 标量与向量可以相乘,且满足交换律,不需要写乘号
- 向量可以除以标量,即相当于向量乘以一个标量的倒数 即
v(向量)/k = v 乘以 1/k
- 标量与向量的乘除 优先级高于 加减
- 标量不能除以向量,且向量不能除以另一个向量
- 乘法的特殊情况:负向量,即
向量 乘以 标量-1
- 几何意义:
以因子(k 即 标量)缩放向量的长度
,如果k<0, 向量的方向就会相反- 当k = -1时,向量仅翻转,得到
大小相等,方向相反
的向量 - 当k = -2时,向量是先翻转,再放大,即-2可以看成(-1)乘以2
- 当k = -1时,向量仅翻转,得到
向量标准化
向量标准化 = 向量 / 向量的模,且向量 != 0
- 标准化向量 :是
向量长度 = 1
,不等于单位向量,单位向量是主对角线数为1,其他全为0,单位向量是标准化向量
向量的加减
总结- 向量不能与标量或者维度不同的向量相加减
- 向量加法满足交换律
- 向量减法不满足交换律,只有当 a=b 时, a-b = b-a
- 向量加法几何意义:平移向量
向量的
距离公式
- 向量a与向量b的距离公式 =
||b-a|| = b与a对应位置数差的平方和,再求根号
- 几何意义:两点间的距离
- 向量a与向量b的距离公式 =
向量的
点乘
总结
- 满足交换律,因为点乘结果是一个标量
- 几何意义:两向量的夹角,即
a · b = |a||b|cosα
==> α = arccos(a·b / |a||b|),当a、b是单位向量时,α = arccos(a·b)
a·b | 夹角α | a和b |
---|---|---|
> 0 | (0°,90°) | 方向基本相同 |
= 0 | 90° | 正交 |
<0 | (90°,108°) | 方向基本相反 |
根据已知的向量v和向量n,且v2平行于n,v1垂直于n,求向量v2和向量v1
- v2平行于n:
v2 = n(|v2| / |n|)
cosα = |v2| / |v|
==>|v2| = cosα·|v|
- 将|v2|代入v2 ==>
v2 = n(cosα·|v| / |n|)
- 分子分母同时乘以
|n|
==>v2 = n(cosα·|v|·|n| / |n|²)
- 根据
a · b = |a||b|cosα
==>v2 = n(v·n / |n|²)
,此时求得v2 - 根据v2求v1,因为
v1 + v2 = |v|
==>v1 = |v| - v2
- 将v2公式代入v1 ==>
v1 = |v| - n(v·n / |n|²)
- v2平行于n:
向量
叉乘
总结【常用】- 向量叉乘运算规则如下
- 向量的叉乘优先级高于点乘
- 几何意义
- a × b = c,c垂直于a和b构成的平面,即c是该平面的法线,分别与a,b都垂直
- a × b = c,即
|c| = |a||b|cosα
- 叉乘既
不满足交换律
,也不满足结合律
- 任何向量与自己叉乘等于零向量,即 向量a × 向量a = 0
- 向量叉乘运算规则如下
矩阵
矩阵在OpenGL中推荐使用一维数组存储
方阵:
行=列
的矩阵向量可以当做
1*n(行向量) / n*1(列向量)
的矩阵使用标量和矩阵的乘法:将矩阵中的每个数都乘以标量
矩阵与矩阵相乘,即
A₃*₂ * B₂*₄ = C₃*₄
,A的列数必须匹配B的行数(记法图示如下)
矩阵乘法总结
- 当S是单位矩阵且乘法有意义,任意矩阵M乘以方阵S,,那么得到的结果就是原矩阵,即
MI = IM = M
- 矩阵乘法不满足交换律,即
AB != BA
- 矩阵乘法满足结合律,前提是ABC的维数使其乘法有意义,即
(AB)C = A(BC)
- 矩阵乘法也满足与标量/向量的结合律,即
(kA)B = k(AB) = A(kB); (vA)B = v(AB)
- 矩阵乘积的转置 相当于 先转置矩阵,然后以相反顺序相乘,即
(AB)ᵀ = BᵀAᵀ
- 当S是单位矩阵且乘法有意义,任意矩阵M乘以方阵S,,那么得到的结果就是原矩阵,即
向量与矩阵乘法总结
- 行向量左乘矩阵,结果是行向量
- 列向量右乘矩阵,结果实列向量
- 结果向量中每个元素都是原向量与矩阵中单独行/列的点积
- 矩阵-向量成法满足对向量加法的分配律,即
(v+w)M = vM + wM
,其中v,w是向量,M是矩阵
基向量:单位向量
p、q、r 定义分别指向+x,+y,+z⽅方向的单位向量量,v = xp+yq+zr
矩阵M对应到坐标轴的单位向量如图所示
矩阵的每一行都能解释为转换后的基向量
矩阵的几何意义
- 方阵的行能被解释为坐标的基向量
- 为了将向量从原坐标变换到新坐标,需要用向量乘以一个矩阵
- 线性变换:从原坐标系到基向量定义的新坐标系的变化
- 零向量乘以任何矩阵仍是零向量
2D下的旋转矩阵公式推演
核心动画CoreAnimation中苹果官方文档有提到
2D下的旋转时围绕原心旋转的
三角函数表
三角函数/角度 | 0(0°) | π/2(90°) | π(180°) | 3π/2(270°) | 2π(360°) |
---|---|---|---|---|---|
sinα | 0 | 1 | 0 | -1 | 0 |
cosα | 1 | 0 | -1 | 0 | 1 |
tanα | 0 | 不存在 | 0 | 不存在 | 0 |
cotα | 不存在 | 0 | 不存在 | 0 | 不存在 |
旋转时向量的变化与三角函数值的关系
旋转变化如图所示
向量与三角函数值的关系
3D下的旋转矩阵公式推演
3D下的旋转时围绕某个轴旋转的,当围绕哪个轴,哪个轴的矩阵中所对应的行和列就用基向量表示
围绕x轴旋转,x轴不会发生变化,所以x对应的矩阵行用基向量表示,图示如下
q向量的值变化过程为: +y(起始) ==> +z ==> -y ==> -z
1 0 0
0 0 1
0 1 0
0 0 -1
0 -1 0r向量的值变化过程:+z(起始) ==> -y ==> -z ==> +y
0 0 1
0 -1 0
0 0 -1
0 1 0
p、r变化过程图示为
与三角函数的关系如图所示
围绕Y、围绕Z与围绕x类似
- 围绕Y轴时R的矩阵:010表示的是基向量,围绕谁懂,谁就必须由基向量表示
- 围绕Y轴时R的矩阵:001表示的是基向量
- 围绕Y轴时R的矩阵:010表示的是基向量,围绕谁懂,谁就必须由基向量表示
缩放与平移矩阵公式推演
- 2D缩放:基向量p和q分别乘以标量k
- 平移:在哪个轴平移,将这个轴的对应的值与平移距离相加
3D数学基础 简要归纳相关推荐
- 《3D数学基础》1.8 混合积
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 《3D数学基础》系列视频 1.5 向量的夹角
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 《3D数学基础系列视频》1.1向量基本概念
今天带来的是系列最新视频,关于向量的内容 本次视频,主要讲解一下向量的基本概念. 国内网盘: http://pan.baidu.com/s/1c0ldm5U 苹果iTunes U注册代码: 1班:EF ...
- 3d数学基础学习总结
3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...
- 《3D数学基础》实践1 向量类代码分析
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...
3D Math Primer for Graphics and Game Development //z 2014-04-28 13:18:20 L.247'38500 BG57IV3@XCL T20 ...
- 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?
现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...
- 3D数学基础——Rotator类的C++实现
Rotator类的C++实现 FRotator类用来以欧拉角形式保存方位,使用pitch-yaw-roll进行约定,类的定义如下: #pragma once #include "FVecto ...
- 3D数学基础及坐标系统
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 3D数学基础——矩阵、欧拉角和四元数的相互转换与比较
矩阵.欧拉角和四元数的相互转换与比较 相互转换 这里只展示最终的转换结果,推导过程请参考<3D数学基础:图形与游戏开发> 欧拉角转换到矩阵 欧拉角描述了一个旋转序列,分别计算出给每个旋转的 ...
最新文章
- Android开发--图形图像与动画(二)--Animation实现图像的 渐变、缩放、位移、旋转
- 【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )
- 面对滚滚而来好政策 安防行业该如何发展
- 我们是如何做DevOps的?
- DevOps组织如何选取拓扑结构以提升协作效能
- adam算法效果差原因_信电学院本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR领域主席赞不绝口...
- java canvas旋转_在HTML5 Canvas上将图像旋转90度
- 严重: Catalina.stop: java.net.ConnectException: Connection refused: connect
- PAT甲级1013 (图,DFS举例详解)
- Chrome插件开发(chrome-extension)
- uni-app 小程序引入字体图标
- winrar压缩软件免费版
- laya龙骨换装_Laya的骨骼换装
- [NeRF]学习笔记(持续更新中)
- 第一行代码-第二版(郭霖著)笔记十(Service)
- CISCO WLC的配置备份与导入
- 帝国CMS7.5仿千图网图片素材下载模板升级版
- web前端大作业:旅游网页主题网站设计——武汉旅游网页设计(11页)HTML+CSS+JavaScript
- mysql 内存调整_mySQL内存及虚拟内存优化设置
- 操作系统教程(第六版)骆斌 第五章文件管理课后习题答案
热门文章
- 御剑情缘服务器维护吗,御剑情缘常见问题 解决方法分享
- 计算机科学导论课后感,关于《计算机科学导论》课程教学的思考
- 计算机科学导论第8章答案,第8章计算机科学导论.ppt
- 易语言之今日头条新闻收集源码
- 程序员常用不常见很难得的地址大全
- CodeProject上的一些摘抄
- 数据分析师初级—中级—高级,每个阶段都需要学习什么?
- html绘制小球并跟随鼠标移动,Canvas跟随鼠标炫彩小球的实现
- cad解除块的快捷命令_cad退出块编辑_cad常用快捷键命令表_cad打印快捷键
- 针对我国——国产数据库进行分析