Unity API详解——Matrix4x4类

news2024/11/13 14:49:37

在脚本中通常用Vector3、QUaternion、Transform等类的属性和方法来对物体进行变换,Matrix4x4类通常在一些比较特殊的地方,如对摄像机的非标准投影变换等。本博客主要介绍Matrix4x4类的一些实例和静态方法。

文章目录

    • 一、Matrix4x4类实例方法
      • 1、MultplyPoint方法:投影矩阵变换
        • (1)基本语法
        • (2)功能说明
        • (3)实例演示
      • 2、MultiplyPoint3x4方法:矩阵变换
        • (1)基本语法
        • (2)功能说明
      • 3、MultiplyVector方法:矩阵变换
        • (1)基本语法
        • (2)功能说明
    • 二、Matrix4x4类静态方法
      • 1、Ortho方法:创建正交投影矩阵
      • 2、Perspectice方法:创建透视投影矩阵
        • (1)基本语法
        • (2)功能说明

一、Matrix4x4类实例方法

在Matrix4x4类,涉及的实例方法有MultplyPoint方法、MultiplyPoint3x4方法、MultiplyVector方法和SetTRS方法。

1、MultplyPoint方法:投影矩阵变换

(1)基本语法

public VEctor3 MultiplyPoint(VEctor 3 v);

(2)功能说明

此方法的功能用来对点v进行投影矩阵变换。例如,设m1位Matrix4x4实例、v1位Vector3实例,Vector3 v2=m1.MultiplyPoint(v1),则v2值变换过程如下:v2=v1.m1·M,系统在进行变换时会给v1增加一个w的分量,扩充为四维向量,w默认值为1,而M为投影变换矩阵:

M = [ cot ⁡ Θ A s p e c t 0 0 0 0 cot ⁡ Θ 0 0 0 0 f f − n 1 0 0 n ⋅ f n − f 0 ] M= \begin{bmatrix} \frac{ \cotΘ}{Aspect} & 0 & 0 & 0\\ 0 & \cotΘ & 0 & 0\\ 0 & 0 & \frac{f}{f-n} & 1\\ 0 & 0 & \frac{n·f}{n-f} & 0 \end{bmatrix} M= AspectcotΘ0000cotΘ0000fnfnfnf0010
其中f和n为远视口的距离,如图所示,Θ为视口夹角,Aspect为视口的纵横比值。

(3)实例演示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aspect_demo : MonoBehaviour
{

    void Start()
    {
        //camera.aspect的默认值即为当前硬件的aspect值
        Debug.Log("camera.aspect的默认值" + GetComponent<Camera>().aspect);
    }


    void OnGUI()
    {
        if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), "aspect=1.0f"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
            GetComponent<Camera>().aspect = 1.0f;
        }
        if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), "aspect=2.0f"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
            GetComponent<Camera>().aspect = 2.0f;
        }
        if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), "aspect还原默认值"))
        {
            //重置当前摄像机的aspect值
            GetComponent<Camera>().ResetAspect();
        }
    }
}

2、MultiplyPoint3x4方法:矩阵变换

(1)基本语法

public VEctor3 MultiplyPoint3x4(VEctor 3 v);

(2)功能说明

此方法的功能是用来对参数值点进行矩阵变换。此方法在对参数v进行矩阵变换时,不涉及投影变换,速度比MultiplyPoint快。例如,设m1为Matrix4x4实例,v1为Vector3实例,则Vector3 v2=m1,MultiplyPoint3线(v1),即为v2=v3*m1,其中v3=(v1,w),w默认值为1

3、MultiplyVector方法:矩阵变换

(1)基本语法

public VEctor3 MultiplyVector(VEctor 3 v);

(2)功能说明

此方法的功能是用来对方向向量v进行矩阵变换。此方法与方法MultiplyPoint功能类似,但它把v当做方向向量而非坐标点进行变换,当用矩阵与v进行变换时,只是对v的方向进行转换,也即系统会对参与变换的Matrix4x4进行特殊处理:设M为参与变换的Matrix4x4实例,其值为:
M = [ m 00 m 01 m 02 m 03 m 10 m 11 m 12 m 13 m 20 m 21 m 22 m 23 m 30 m 31 m 32 m 33 ] M= \begin{bmatrix} m00 & m01 & m02 & m03\\ m10 & m11 & m12 & m13\\ m20 & m21 & m22 & m23\\ m30 & m31 & m32 & m33 \end{bmatrix} M= m00m10m20m30m01m11m21m31m02m12m22m32m03m13m23m33

二、Matrix4x4类静态方法

1、Ortho方法:创建正交投影矩阵

在这里插入图片描述

2、Perspectice方法:创建透视投影矩阵

(1)基本语法

public static Matrix4x4 Perspective(float fov,float aspect,float zNear,float zFar);

其中参数fov为视口夹角,参数aspect为视口纵横比例,参数zNear为近视口距离,参考zFar为远视口距离。

(2)功能说明

此方法的功能视床架一个透视投影矩阵。若要更改摄像机的透视投影矩阵,可以用如Camera.main.projectionMatrix=Matrix4x4.Perspective(float fov,float aspect,float zNear,float zFar);如果要重置其投影矩阵,需要使用语法
Camera.main.ResetProjectionMatrix();
方法中各个参数图解如图4和图5所示(其中aspect=width/height)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习实战教程(九):模型泛化

泛化能力 模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中&#xff0c;我们通常会将已有的数据集划分为训练集和测试集&#xff0c;使用训练集训练模型&#xff0c;然后使用测试集来评估模型的性能。模型在训练集上表现得好&#xff0c;并不一定能在测…

Redis源码分析(基于Redis7,对比Redis6)

PS: redis7.0.9版本的 1.Redis 源代码分类 1.1Redis 基本的数据结构 基础 Redis对象object.c字符串t_string.c列表t_list.c字典t_hash.c集合及有序集合t_set.c和z_set.c数据流 t_stream 底层实现结构 listpack.c 和 rax.c 简单动态字符串 sds.c整数集合 intset.c压缩列表 z…

【dp】最长递增子序列

文章目录 方法一&#xff1a;动态规划方法二&#xff1a;贪心 二分查找构造最长递增子序列 方法一&#xff1a;动态规划 dp[i]&#xff1a;末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1&#xff0c;若遍历到的元素小于当前值arr[i]&#xff0c;表示当前值arr[i]可以和…

国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义

国考省考行测&#xff1a;词句理解&#xff0c;词的对象指代&#xff0c;就近原则&#xff0c;主语一致法&#xff0c;语意语境分析上下文找出指代含义 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国…

3年100亿!苏宁易购与倍科达成重磅战略合作

紧抓消费复苏机遇&#xff0c;家电行业迎来重磅合作。4月20日&#xff0c;苏宁易购与国际知名家电品牌倍科在南京召开战略合作发布会&#xff0c;共同宣布升级战略合作伙伴关系。双方将围绕3年100亿战略合作目标开展独家品牌授权、发起“BIS”计划、打造生态开放平台、升级用户…

5G基站外市电改造建设方案 (ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 外市电定义及分类 定义&#xff1a;由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类&#xff1a; &#xff08;1&#xff09;按电压等级分类 ①提供…

贝叶斯学习(Bayesian Learning)基础篇

Bayesian Learning 前言Motivation and IntroductionThink about Spam Filtering.先验概率后验概率似然度边际概率 Basic assumptionRelevancePractical diculties Bayes TheoremProbability: random eventsBayesian Learning Maximum A Posteriori HypothesisBayes Optimal Cl…

合同管理的6个最佳实践

合同管理不善会使你的合同流程效率低下&#xff0c;并产生负面影响&#xff1a; -收入损失 谈判缓慢、审批延迟和里程碑缺失等低效合同代价高昂。如果没有办法自动跟踪最后期限&#xff0c;并得到通知来执行时间敏感的行动&#xff0c;就会有错过最后期限的风险。 -协作和…

数组【有点难,要注重实战】

目录 1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 3. 数组越界4. 数组作为函数参数4.1 冒泡排序函…

JavaEE-一文了解IP协议与IP地址

目录 IP协议什么是IP地址IP地址的组成动态分配IPNAT机制(网络地址转换) IP协议 IP协议是不可靠、无连接的 不可靠:表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务&#xff0c;任何可靠性的要求都必须由上层来提供&#xff08;如TCP&#xff09;。如果传输过…

【C++|排序算法】冒泡、快排、归并、堆排序算法模版

目录 简介冒泡排序快速排序归并排序堆排序结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国…

字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

摘要 说在前面&#xff0c;面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到几个原因&#xff1a;1、虚报工资&#xff0c;比实际高30%&#xff1b;2、有更好的人选&#xff0c;这个可能性不大&…

反垃圾邮件产品技术要求

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品技术要求 引言 为指导反垃圾邮件产品的研制、生产、测试和评价工作的开展&#xff0c;本标准依据《信息技术 安全技…

基于Spring注解 + MyBatis + Servlet 实现数据库交换的小小Demo

基于Spring注解 MyBatis Servlet 实现数据库交换的小小Demo 第一步 创建web 项目&#xff0c;这一步省略&#xff0c;有不会的可以参考之前发布的文档 第二步 配置pom.xml文件 <dependencies><!-- Spring常用依赖 --><dependency><groupId>org.spr…

SpringCloud --- Eureka注册中心

一、场景 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图 思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c;order-service调用时该…

【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/ 1. 题目介绍&#xff08;67. 把字符串转换成整数&#xff09; 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 …

day1 什么是互联网

目录 计算机网络的定义与分类 网络的网络 互联网的组成 互联网的边缘部分 互联网基础结构发展的三个阶段 第一阶段&#xff08;1969 - 1990&#xff09; 第二阶段&#xff08;1985 - 1993&#xff09; 第三阶段&#xff08;1993 - 现在&#xff09; 20世纪90年代&#xff…

项目经验总结——送给测试岗做项目的朋友们

目录 前言 1、项目排期时的时间预估能力欠佳 2、QA写单元测试 3、集成测试方案不够精简 4、排了优先级也很难取舍 5、搭完redis集群却不了解redis运行机制 总结 结语 前言 最近负责的L项目从3月初开始开发到6月底正式上线&#xff0c;这是我在工作快1年时间里第一次独…

机械键盘、口袋打印机,万元奖金等你拿!「万象格新」AI绘画X海报设计大赛即将开启...

号外&#xff01;「万象格新」大赛开启 如果阳光暖到你心里&#xff0c;那一定是一格在想你~ 春夏交替&#xff0c;万物焕发生机&#xff0c;明媚色彩娱情惬意 在这样一个美好的时节 如果你&#xff1a; 心中荡漾着色彩斑斓的 AI 绘画创意 想要 show 出独到的审美与非凡设计能力…

【系统集成项目管理工程师】项目干系人管理

&#x1f4a5;十大知识领域&#xff1a;项目干系人管理 项目干系人管理包括以下 4 个过程: 识别干系人规划干系人管理管理干系人参与控制干系人参与 一、识别干系人 输入工具与技术输出项目章程采购文件事业环境因素组织过程资产组织相关会议专家判断干系人分析干系人登记册 …