关于AS3里的Matrix3D中的appendXXX和prependXXX
最近在看3D相关的一些基础,因为搞as3这么多年了,决定3D基础这块还是从AS3入手,3D游戏开发这块从U3D入手,扯远了,研究Matrix3D类时发现了矩阵处理转换时的一些方法均分为appendXXX和prependXXX两种,帮助文档中的解释是后置和前置的区别,搞不清楚,所以决定花点时间弄一下这个东西。
直接上代码,最后一行注释是前四行代码的执行结果:
var m:Matrix3D = new Matrix3D();
m.appendRotation(45, Vector3D.X_AXIS);
m.appendTranslation(10, 20, 30);
trace(m.decompose());
//Vector3D(10, 20, 30),Vector3D(0.7853981852531433, 0, 0),Vector3D(1, 1, 1) var m:Matrix3D = new Matrix3D();
m.appendTranslation(10, 20, 30);
m.appendRotation(45, Vector3D.X_AXIS);
trace(m.decompose());
//Vector3D(10, -7.071067810058594, 35.35533905029297),Vector3D(0.7853981852531433, 0, 0),Vector3D(1, 1, 1) var m:Matrix3D = new Matrix3D();
m.prependRotation(45, Vector3D.X_AXIS);
m.prependTranslation(10, 20, 30);
trace(m.decompose());
//Vector3D(10, -7.071067810058594, 35.35533905029297),Vector3D(0.7853981852531433, 0, 0),Vector3D(1, 1, 1) var m:Matrix3D = new Matrix3D();
m.prependTranslation(10, 20, 30);
m.prependRotation(45, Vector3D.X_AXIS);
trace(m.decompose());
//Vector3D(10, 20, 30),Vector3D(0.7853981852531433, 0, 0),Vector3D(1, 1, 1)
上面的示例可以看出两者之间的差距是运算顺序不同,prependXXX的运算顺序是反过来的,好吧,我们再看一个示例:
var m:Matrix3D = new Matrix3D();
m.appendRotation(45, Vector3D.X_AXIS);
m.appendTranslation(10, 15, 20);
m.appendTranslation(10, 15, 20);
m.appendRotation(45, Vector3D.Y_AXIS);
m.appendTranslation(10, 15, 20);
m.appendTranslation(10, 20, 30);
m.appendRotation(45, Vector3D.Z_AXIS);
trace(m.decompose());
//Vector3D(-1.8198051452636719, 90.10408020019531, 64.14213562011719),Vector3D(0.7853981852531433, 0.7853982448577881, 0.7853981852531433),Vector3D(1, 1, 1)
m.appendTranslation(10, 20, 30);
trace(m.decompose());
//Vector3D(8.180194854736328, 110.10408020019531, 94.14213562011719),Vector3D(0.7853981852531433, 0.7853982448577881, 0.7853981852531433),Vector3D(1, 1, 1) var m:Matrix3D = new Matrix3D();
m.appendRotation(45, Vector3D.X_AXIS);
m.appendTranslation(10, 15, 20);
m.appendTranslation(10, 15, 20);
m.appendRotation(45, Vector3D.Y_AXIS);
m.appendTranslation(10, 15, 20);
m.appendTranslation(10, 20, 30);
m.appendRotation(45, Vector3D.Z_AXIS);
trace(m.decompose());
//Vector3D(-1.8198051452636719, 90.10408020019531, 64.14213562011719),Vector3D(0.7853981852531433, 0.7853982448577881, 0.7853981852531433),Vector3D(1, 1, 1)
m.prependTranslation(10, 20, 30);
trace(m.decompose());
//Vector3D(25.857860565185547, 107.78174591064453, 82.0710678100586),Vector3D(0.7853981852531433, 0.7853982448577881, 0.7853981852531433),Vector3D(1, 1, 1)
总而言之,appendXXX比较适合我们的逻辑,即在之前的基础上添加转换,而prependXXX则可以看做先弄一个新的矩阵添加当前的转换,再添加其本身的所有转换,即prependXXX添加的转换总是在所有的转换之前;
或者appendXXX可以看做按全局坐标来处理,而prependXXX可以看做按本地坐标来处理。
关于AS3里的Matrix3D中的appendXXX和prependXXX的更多相关文章
- bat批处理 查找替换:批处理如何查找并替换文本里特定字符串中的部分内容
批处理如何查找并替换文本里特定字符串中的部分内容 摘自:http://www.bathome.net/thread-43349-1-1.html 脚本如下: @if()==() echo off &a ...
- visual studio 2019工具里添加开发中命令提示符的方法
最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...
- Django里URL配置中name参数的作用
先看一下URL配置,新增了如下内容: 修改视图views.py 增加一个页面 现在要求是在name页面里面增加一个链接,显示详细信息.修改name页面 这个功能实现了,可是之前添加的那个name参数是 ...
- 在环境变量里设置VI中TAB缩进
终端上的tab键默认是缩进8个空格的(记住8个空格不等于一个tab, tab和空格不是一个概念) 一般设置vim的tab(制表符)的缩进的时候都这样:set tabstop=4 ” 表示让tab的宽度 ...
- [转]html里a标签中href调用js的几种方法
文章转自:https://blog.csdn.net/best_luxi/article/details/45062301 我们常用的在a标签中有点击事件: 1. a href=”javascript ...
- 寻找 K8s 1.14 Release 里的“蚌中之珠”
摘要: K8s 1.14 发布了,Release Note那么长,我们该从何读起? 本文由张磊.心贵.临石.徙远.衷源.浔鸣等同学联合撰写. Kubernetes 1.14.0 Release 已经于 ...
- AS3 从外部SWF中获取资源的方法(ApplicationDomain的使用)
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)
在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性.Anchor属性定义控件的定位点位置.当控件锚定到某个 ...
- VS2010里属性窗口中的生成操作
,无,编译 ,内容 ,嵌入的资源...分别是什么意思? 如果是类.cs文件,就得编译之后你才能使用的.如果是txt,excle这种文件,就属性内容或者资源文件了. @普通用户: 内容(Content) ...
随机推荐
- Linux 下shell显示-bash-4.1$不显示用户名路径的解决方法
Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: 而不是我们经常看 ...
- WPF中映射clr namspace
1. xaml中直接映射为prefix xmlns:prefix="clr-namespace:MyApplication.Modules.Entity;assembly=MyAssembl ...
- hdu4614Vases and Flowers
http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树的各种操作 写的有点乱 求插入位置是以区间K值的方法求出的 向下更新 #include <io ...
- [转] web.xml文件详解
转自:http://www.cnblogs.com/hellojava/archive/2012/12/28/2835730.html 前言:一般的web工程中都会用到web.xml,web.xml主 ...
- 漫谈MySql中的事务
最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...
- 如何在asp.net mvc3中使用HttpStatusCode
下载了asp.net mvc 4的源码看了看,没怎么看清楚.不过个人觉得MVC4 beta中Web API这个是比较不错的,虽然说它是往传统回归. web api最好的莫过于它更加适合使用jquery ...
- [转] C# Winform 拦截关闭按钮触发的事件
原文 C# Winform 拦截关闭按钮触发的事件 用户关闭软件时,软件一般会给“是否确认关闭”的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否则把FormClos ...
- android布局ui
LinearLayout和RelativeLayout 属性对比 共有属性:java代码中通过btn1关联次控件android:id=”@+id/btn1″ 控件宽度android:layout_wi ...
- HDU 3642 Get The Treasury 线段树+分层扫描线
http://www.acmerblog.com/hdu-3642-get-the-treasury-6603.html 学习:三维就是把竖坐标离散化分层,每一层进行线段树二维面积并就好了
- 第一天CSS实战培训及笔记及感想
首先,我很激动...... 3点了,凌晨3点了,我居然还没睡.总共不到3个小时的视频消化了6个小时,今天是培训班第一天,一下子就来高强度的讲课,整个上过基础班的都听得东倒西歪,更别说我这个没上基础班滴 ...