组合变换

假设有一个立方体,这个立方体由8个顶点构成,我们希望将旋转、平移、缩放三个变换应用到这个立方体的每一个顶点。假设T为平移矩阵,S为缩放矩阵,R为旋转矩阵,Cij代表了立方的单个顶点,那么最简单的方式为:

  Cij*R*T*S.每个顶点都先乘以旋转矩阵,然后将结构在乘以平移矩阵,最后将结果乘以缩放矩阵。

  但是在3D开发中,我们要考虑到性能问题,不能进行频繁的矩阵运算,我们就需要找到一种方式,将旋转、

  平移和缩放三个变换矩阵变成一个矩阵。这样我们就从3次矩阵乘法运算变成了一次矩阵乘法运算。在这之前

  我们知道矩阵乘法的结合律,那么我们可以将上述方式改为:

  Cij*(RTS),然后,我们只需要将RTS预先算出来,得到最终变换矩阵M。这样我们将三个矩阵封装成了一个

  矩阵,这样非常有利于性能的提升。

原文地址:https://www.cnblogs.com/leiGameDesigner/p/8372674.html

时间: 2024-10-31 02:23:13

组合变换的相关文章

三维变换的一个应用之组合变换

这种组合变换在实际开发当中应用很多,所以知道原理可以举一反三 第一,你要明白矩阵是有结合律的 第二,你要知道旋转矩阵 绕x轴 绕y轴 绕z轴时,这个旋转矩阵是三个形式的矩阵 第三,你要明白为什么我们在旋转一个模型时一定要把它先移回原点,当然了,这个旋转矩阵有关 小应用: 对三角形(中心点(75,93,1))以中心点左旋转90度,要经过一下几步: 1.将三角形的中心移动到原点,也即是相反方向(75,93,1)个单位 2.使用x轴的选装矩阵 3.将中心点移回原来的位置 1  0 -75       

矢量旋转,分别以三角变换,矩阵变换实现,C#源码。

最近用到了图形旋转,花了不少时间查找材料,编码测试.而且还用到了20年前老师教给的三角函数,还有大学里面早已淡忘的矩阵运算. 呵呵,整理一下把,希望对大家有些帮助. 功能: 已知矢量OP,顺时针旋转α度,求P2点的坐标. 根据三角函数,我们可以很自然的写出: P2.X = O.X + (int)(Math.Cos(alpha) * r) ; P2.Y = O.Y + (int)(Math.Sin(alpha) * r) ;    //哦,代码的颜色怎么不变呢? 噢,因为我刚开始在博客园写博客,所

“生动”讲解——矩阵的空间变换

几何图形的矩阵表示: 我们把每个顶点坐标看成一个行向量,采用齐次坐标法,即每个顶点坐标增加一个相同的分量1作为矩阵的一行,这样就可以用矩阵表示图形了.如: 点A(1,-1),增加一个分量1,将其作为一个矩阵的行向量A=[1?11]; 以此类推,所以这个图形可以用矩阵来表示,即: P=?????131?2?113?21111????? 平移变换: 如果平移向量是(a, b),点(x, y)平移后的点为(x+a, y+b). 如下图所示: 平移变换矩阵: 平移变换矩阵为:???10a01b000??

Quartz 2D编程指南(5)变换(Transforms)

Quartz2D绘制模型定义了两种完全独立的坐标空间:用户空间(用于表现文档页)和设备空间(用于表现设备的原生分辨率).用户坐标空间用浮点数表示坐标,与设备空间的像素分辨率没有关系.当我们想要打印和显示文档时, Quartz会将用户空间坐标系统映射到设备空间坐标系统.因此,我们不需要重写应用程序或添加额外的代码来调整应用程序的输出以适应不同的设备. 我们可以通过操作CTM(current transformation matrix当前变换矩阵)来修改默认的用户空间.在创建图形上下文后,CTM是单

理解SVG坐标系统和变换: transform属性

SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transform属性和CSS属性,包括如何使用,以及你必须知道的关于SVG坐标系变换的知识. 这是我写的SVG坐标系统和变换部分的第二篇.在第一篇中,包括了任何要理解SVG坐标系统基础的需要知道的内容:更具体的是, SVG viewport, viewBox 和 preserveAspectRatio 属性.

WPF 10天修炼 第八天 - 形状、画刷和变换

图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System.Windows.Shapes.Shape类是一个抽象类,从该类又派生出多个不同的子类,如下图: Shape类的通用属性 属性名称 描述 Fill 绘制填充的画刷 Stroke 绘制边框的画刷 StrokeThickness 与设备无关的边框宽度 StrokeStartLineCap和StrokeEn

css之3D变换

3D变换的x,y,z轴是分别效果是: x轴旋转的话,就是头和脚进行转动 y轴旋转的话,就是左右手进行转动 z轴旋转的话,就是整个身体平铺在旋转. 上面是针对旋转的意思去,但是对于其他的类似一样,就是这样子去理解x,y,z轴的在哪里的 transform: rotateX(360deg); transform: rotateY(360deg); transform: rotateZ(360deg); 变换跟2D同理 最主要的区别是透视视图"景深" <!--景深的作用: 1.让3D场

WebGL简易教程(五):图形变换(模型、视图、投影变换)

目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 (2) 正射投影 3. 综合运用 4. 参考 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值的坐标都是采用的默认0值,而一般的三维场景都是很复杂的三维坐标.为了在

[3D数学]矩阵 2017.8.16

<1>有时候我们想对整个物体做一定量旋转,其实可以直接对物体坐标系进行相反量的旋转 比如:现在想对一个物体顺时针旋转20度,再扩大200%,,既可以对这个物体的坐标系先缩小200%,再逆时针旋转20度:  注意这里组合变换,需要以相反的顺序做变换 <2>2D旋转矩阵:限制了位移 绕原点旋转 [cosθ  sinθ] [-sinθ  cosθ] 对一个向量(4,2)旋转θ度 (4*cosθ-2*sinθ,4*sinθ+2*cosθ) 即为旋转θ度后的向量