3D变换矩阵的分解公式
3D变换矩阵:平移、缩放、旋转
3D变换矩阵是一个4x4的矩阵,即由16个实数组成的二维数组,在三维空间中,任何的线性变换都可以用一个变换矩阵来表示。本文介绍从变换矩阵中提取出平移、缩放、旋转向量的方法,提取公式的复杂程度为“平移 < 缩放 < 旋转”,文章同时给出数学公式和JavaScript代码(使用了浏览器的数学库),首先给定一个行主序的4x4的变换矩阵:
// 变换矩阵(a~l为任意实数)
const transform = [
[a, b, c, d],
[e, f, g, h],
[i, j, k, l],
[0, 0, 0, 1],
];
最后一列就是平移向量:
// 平移向量
const translate = [
transform[0][3],
transform[1][3],
transform[2][3]
];
前三列向量的长度就是缩放向量:
// 缩放向量
const scale = [
Math.hypot(transform[0][0], transform[1][0], transform[2][0]),
Math.hypot(transform[0][1], transform[1][1], transform[2][1]),
Math.hypot(transform[0][2], transform[1][2], transform[2][2]),
]
旋转向量有若干种不同的表现形式,包括Euler角、四元数、轴-角,但旋转矩阵是统一的,将前三列分别除以缩放向量,就得到3x3的旋转矩阵:
// 旋转矩阵
const scale = [
[
transform[0][0] / scale[0],
transform[0][1] / scale[1],
transform[0][2] / scale[2]
], [
transform[1][0] / scale[0],
transform[1][1] / scale[1],
transform[1][2] / scale[2]
], [
transform[2][0] / scale[0],
transform[2][1] / scale[1],
transform[2][2] / scale[2]
],
]
下面这张图可以直观地看到,平移、缩放、旋转在变换矩阵中的位置关系:
3D变换矩阵的分解公式相关推荐
- (转)从零实现3D图像引擎:(11)苍井空做客讲解3D变换矩阵的推导
1. 数学分析 上一篇中间在做旋转的时候我直接用了旋转变换矩阵,当时觉得很尴尬,因为之前没说过是怎么产生的该矩阵. 1) 矩阵和向量的微妙关系 如果您还记得向量加法的几何意义,那么不难看懂下面的等式: ...
- html 3d转换动画,开源项目:CSS 3D转换和动画学习示例教程
下面介绍的开源项目,是CSS在动画/3D变换方面的一些应用,非常酷的效果,全部由CSS3来实现. 在这里JavaScript仅作为动画控制来使用,JS并不控制UI界面的具体呈现,切换动画.3D效果仅需 ...
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
[OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循"署名-非商业用途-保持一致" ...
- 前端开发中需要用到的变换矩阵(2D游戏适用)
http://shawphy.com/2011/01/transformation-matrix-in-front-end.html 前端开发中需要用到的变换矩阵 6条回复 想写写关于矩阵变换的博文已 ...
- 线结构光标定详细步骤与实现HALCON
这部分是HALCON官方的一个例子,下面是对这个比较复杂的例子的一些理解,具体的每一句代码都对应相应的作用解释 具体的例子是这个: 此程序演示如何执行校准光片测量系统: 测量系统由区域扫描摄像机和光线 ...
- 【OpenGL ES】 Android OpenGL ES -- 透视投影 和 正交投影
博客地址 : http://blog.csdn.net/shulianghan/article/details/46680803 源码下载 : http://download.csdn.net/det ...
- Android OpenGL ES 2.0绘制简单三角形
实现步骤 l 实现一个工具类ShalderUtil,用于将着色器代码加载进显卡进行编译 l 实现一个三角形Triangle类 在该类中加载着色器.初始化顶点数据.初始化着色器以及绘制三角形方法 l ...
- 计算机图形学中需要掌握的数学基础知识有哪些?
计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...
- Unity3D脚本中文系列教程(八)
◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...
- 游戏开发中的矩阵与变换
游戏开发中的矩阵与变换 介绍 矩阵组件和恒等矩阵 缩放转换矩阵 旋转变换矩阵 变换矩阵的基础 翻译转换矩阵 全部放在一起 剪切变换矩阵(高级) 转换的实际应用 在转换之间转换位置 相对于自身移动对象 ...
最新文章
- 机器学习实战读书笔记--k邻近算法KNN
- BIO和NIO的区别
- java网络接口_java网络编程之识别示例 获取主机网络接口列表
- DefaultMessageListenerContainer
- 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
- 动态规划之《寻找最大上升序列》
- zabbix使用ICMP ping监控网络状态
- Axios中无法运行 json-server【已解决】
- 惊呆了!JDK1.8竟然打破了我对接口的一切认知...
- 爬虫基本原理及requests,response详解
- mysql56允许远程连接_mysql允许远程连接的方法
- 架构之美 | 按图索骥,就能做好架构图!
- 计算机系的的毕业感言,计算机班同学的毕业感言
- 有些人的恨是没有原因的,他们平庸、没有天分、碌碌无为,于是你的优秀、你的天赋、你的善良和幸福都是原罪。
- 红光光浴抗衰机制#大健康#红光光浴#红光#种光光学
- 减库存怎么处理 java_java减库存
- C# 模拟鼠标移动和点击(转载)
- J-flash工具使用教程
- 如何获取当前配置的IPV6地址的前缀长度(掩码)
- VScode报错内容:Already included file name