MultiplyVector方法
该方法的功能是用来对方向向量v进行矩阵变换,当矩阵与v进行变换时,只是对v的方向进行转换。那么系统就会对参与变换的Matrix4x4矩阵M进行特殊处理。
例如:
经过系统处理后就变为
其中n002 + n102 + n202 = 1,n012 + n112 + n212 = 1,n022 + n122 + n222 = 1。此处以DirectX为例。在DirectX中向量的变换时v.M,而在OpenGL中向量的变换形式是M.v。
看下面的例子
using UnityEngine;
using System.Collections; public class MultiplyVector_ts : MonoBehaviour { public Transform tr;
Matrix4x4 mv0 = Matrix4x4.identity;
Matrix4x4 mv1 = Matrix4x4.identity;
// Use this for initialization
void Start () { mv0.SetTRS(Vector3.one * 10.0f, Quaternion.Euler(new Vector3(0.0f, 30.0f, 0.0f)), Vector3.one); mv1.SetTRS(Vector3.one * 10.0f, Quaternion.Euler(new Vector3(0.0f, 0.6f, 0.0f)), Vector3.one);
} // Update is called once per frame
void Update () { } void OnGUI()
{
if(GUI.Button(new Rect(10.0f,10.0f,120.0f,45.0f),"方向旋转30度"))
{
tr.position = mv1.MultiplyPoint(tr.position);
Vector3 tmp = new Vector3(10.0f, 0.0f, 0.0f);
Vector3 v = mv0.MultiplyVector(tmp);
Debug.Log("变换前的模长: " + tmp.magnitude);
Debug.Log("变换后的向量: " + v);
Debug.Log("变换后的模长: " + v.magnitude);
}
}
}
运行结果

从上面的例子中我们可以证明,使用MultiplyVector方法只是改变了向量的方向,但其模的大小并未改变。
关于代码中出现的SetTRS方法说明一下,该方法的功能是可以重设Matrix4x4矩阵。
函数原型为
//pos为位置向量,q为旋转角,s为放缩向量
public void SetTRS(Vector3 pos,Quaternion q,Vector3 s);
例如
Matrix4x4 m1 = Matrix4x4.identity;
m1.SetTRS(pos,q,s);
Vector3 v2 = m1.MultiplyPoint3x4(v1);
则v2的值等同于将v1的position增加pos,rotation旋转q,scale放缩s后的值。
MultiplyVector方法的更多相关文章
- Unity中的Matrix4x4类
物体平移旋转一般变换底层都是用矩阵来表示的,一般不会用到这个类.有时候需要一些世界坐标与局部坐标转换的时候,可能就要用到了. //创建平移 旋转 缩放矩阵 可以理解为一个坐标系(不知道对不对..) M ...
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
随机推荐
- 由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题
由于CentOS6的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题.解 ...
- python 在升级到python2.7之后安装相关插件
# yum update # yum install centos-release-SCL # yum search all python27 在搜索出的列表中发现python27-python-de ...
- 给openvpn客户分配固定ip地址
虽然openvpn提供dhcp服务,但是dhcp是有租约的,到期后会重新分配ip,造成连接中断的问题,所以最好还是给客户端固定一个ip. 思路:开启客户端配置目录,然后为每一个客户建一个配置文件,里面 ...
- C#操作txt文件并清空添加操作
C#操作txt文件,进行清空添加操作的例子.代码: //把txt清空 FileStream stream = File.Open(Adr,FileMode.OpenOrCreate,FileAcces ...
- python字符串转换成变量的几种方法
个人比较喜欢用第三种方法 var = "This is a string" varName = 'var' s= locals()[varName] s2=vars()[varNa ...
- RocketMQ集群搭建
1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...
- 10分钟-jQuery过滤选择器
1.:first过滤选择器 本次我们介绍过滤选择器,该类型的选择器是依据某过滤规则进行元素的匹配.书写时以":"号开头,通经常使用于查找集合元素中的某一位置的单个元素. 在jQue ...
- 【Unity笔记】Awake()和Start()的区别
Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled == true的情况下执行. v ...
- 消息队列(RabbitMQ、zorneQ、metaQ、activeMQ)
术语: AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. JMS, ...
- Elasticsearch5.X IN Windows 10 系列文章(5)
ElasticSearch版本: 5.5.1 (最新稳定版为5.5.2),由于用到IK中文分词插件,最新版本没有5.5.2 ,所以使用5.5.1 日期:2017-08-31 第五章:Kibana 安装 ...