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变换矩阵的分解公式相关推荐

  1. (转)从零实现3D图像引擎:(11)苍井空做客讲解3D变换矩阵的推导

    1. 数学分析 上一篇中间在做旋转的时候我直接用了旋转变换矩阵,当时觉得很尴尬,因为之前没说过是怎么产生的该矩阵. 1) 矩阵和向量的微妙关系 如果您还记得向量加法的几何意义,那么不难看懂下面的等式: ...

  2. html 3d转换动画,开源项目:CSS 3D转换和动画学习示例教程

    下面介绍的开源项目,是CSS在动画/3D变换方面的一些应用,非常酷的效果,全部由CSS3来实现. 在这里JavaScript仅作为动画控制来使用,JS并不控制UI界面的具体呈现,切换动画.3D效果仅需 ...

  3. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport

    [OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循"署名-非商业用途-保持一致" ...

  4. 前端开发中需要用到的变换矩阵(2D游戏适用)

    http://shawphy.com/2011/01/transformation-matrix-in-front-end.html 前端开发中需要用到的变换矩阵 6条回复 想写写关于矩阵变换的博文已 ...

  5. 线结构光标定详细步骤与实现HALCON

    这部分是HALCON官方的一个例子,下面是对这个比较复杂的例子的一些理解,具体的每一句代码都对应相应的作用解释 具体的例子是这个: 此程序演示如何执行校准光片测量系统: 测量系统由区域扫描摄像机和光线 ...

  6. 【OpenGL ES】 Android OpenGL ES -- 透视投影 和 正交投影

    博客地址 : http://blog.csdn.net/shulianghan/article/details/46680803 源码下载 : http://download.csdn.net/det ...

  7. Android OpenGL ES 2.0绘制简单三角形

    实现步骤 l  实现一个工具类ShalderUtil,用于将着色器代码加载进显卡进行编译 l  实现一个三角形Triangle类 在该类中加载着色器.初始化顶点数据.初始化着色器以及绘制三角形方法 l ...

  8. 计算机图形学中需要掌握的数学基础知识有哪些?

    计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...

  9. Unity3D脚本中文系列教程(八)

    ◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...

  10. 游戏开发中的矩阵与变换

    游戏开发中的矩阵与变换 介绍 矩阵组件和恒等矩阵 缩放转换矩阵 旋转变换矩阵 变换矩阵的基础 翻译转换矩阵 全部放在一起 剪切变换矩阵(高级) 转换的实际应用 在转换之间转换位置 相对于自身移动对象 ...

最新文章

  1. 机器学习实战读书笔记--k邻近算法KNN
  2. BIO和NIO的区别
  3. java网络接口_java网络编程之识别示例 获取主机网络接口列表
  4. DefaultMessageListenerContainer
  5. 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
  6. 动态规划之《寻找最大上升序列》
  7. zabbix使用ICMP ping监控网络状态
  8. Axios中无法运行 json-server【已解决】
  9. 惊呆了!JDK1.8竟然打破了我对接口的一切认知...
  10. 爬虫基本原理及requests,response详解
  11. mysql56允许远程连接_mysql允许远程连接的方法
  12. 架构之美 | 按图索骥,就能做好架构图!
  13. 计算机系的的毕业感言,计算机班同学的毕业感言
  14. 有些人的恨是没有原因的,他们平庸、没有天分、碌碌无为,于是你的优秀、你的天赋、你的善良和幸福都是原罪。
  15. 红光光浴抗衰机制#大健康#红光光浴#红光#种光光学
  16. 减库存怎么处理 java_java减库存
  17. C# 模拟鼠标移动和点击(转载)
  18. J-flash工具使用教程
  19. 如何获取当前配置的IPV6地址的前缀长度(掩码)
  20. VScode报错内容:Already included file name

热门文章

  1. 驱动人生解锁“C盘瘦身”功能,助力电脑快速运行
  2. hadoop权威指南-MapReduce气象程序实现过程
  3. 淘宝装修:1920全屏海报(源代码免费下载)
  4. Restorator 2007 Build 1709 韦斯特*金 汉化版
  5. ios视频播放器-1
  6. 使用kon-boot绕过win10或其他版本密码
  7. Newtonsoft.Json基础问题
  8. Android 加载网络图片
  9. 二进制修改linux文件,linux下的二进制文件操作
  10. css制作序列帧动画