游戏开发中的矩阵

3D游戏开发所需的数学基础——矩阵 矩阵是3D数学中十分重要的基础!掌握它是重中之重! 一: 矩阵的定义 二: 矩阵运算 三:特殊的矩阵 四:使用行矩阵还是列矩阵 阅读详情

矩阵很多同学没有接触过,所以感觉很难,很复杂,其实只要学过矩阵的同学都知道,矩阵运算并不难。今天我们给大家讲讲游戏开发中的矩阵的运算。

1:矩阵是什么?

   矩阵是描述线性变换的一种数学工具,线性变换指的是使用一次函数从一个空间变换到另外一个空间。

例如在空间A中的一个2维向量(xa, ya)变换到空间B,使用一次线性函数变换后得(xb, yb)。

    xb = A*xa + B*ya + C;

    yb = M*xa + N*ya + D;

  上述变换中,xb 是由xa, ya 经过线性运算而得到得。如果xb = A*xa^2 + B*ya + C,这样就不是线性变换了。

   数学前辈们为了描述上面的线性变换,发明了矩阵,把上面的变换标记为:

 

 

  上面的变换,(xa, ya)通过矩阵变换到(xb, yb),用矩阵是如何变换的呢?我们实际就是把(xa, ya)*矩阵 = (xb, yb)。

2: 向量与矩阵, 矩阵与矩阵的乘法;

向量与矩阵乘法:

   按照上述的例子我们一起来计算一下,空间Va的向量(xa, ya), 变换到空间Vb的向量(xb, yb)

   (1): 扩展向量的维度为3维, (xa, ya)变成了(xa, ya, 1)

   (2): 计算(xa, ya, 1) * 矩阵

   【xa, ya, 1】 *  

 = 【(A*xa + B*ya + C*1), (M*xa+N*ya+D*1), xa*0+ya*0+1*1】

   

总结一下向量与矩阵的乘法规则:

      新向量的第i个元素,等于原来向量的每个元素与第i列矩阵的每个对应数据相乘后相加。由这个规则,我们可以得到向量与矩阵相乘向量的维度必须和矩阵的行数一样。

很多同学马上就会有疑问了,矩阵既然最后还是要结合元素计算,我干嘛还要用矩阵呢?直接算不就可以么?接下来矩阵得第二个妙处就在于每个线性变化都对应一个矩阵,我们可以把多次线性变换叠加起来,这样就可以减少运算的次数。比如我要把100个点,由V1空间,变换到v2空间,再变换到v3空间。V1到v2对应一个矩阵,v2到v3对应一个矩阵,我们可以把这两个矩阵变换叠加起来变成一个矩阵。100个点,每个点计算一次矩阵乘法即可得到新的点,而不用每个点计算2次矩阵乘法得到新的点。

如何把多个矩阵对应的多次线性变换叠加起来呢?这个就是矩阵与矩阵的乘法。例如

 

根据上面的规律,新矩阵的对应第i行第j列元素,我们叫做元素ij。矩阵变化的叠加就是矩阵乘法,矩阵乘法的计算规则如下:

A矩阵*B矩阵=C矩阵,  Cij = Ai0*Bj0 + Ai1*Bj1 + ….. ;即Cij为A的第i行与B的第j列的每项数据相乘后的和(即dot(Ai, Bj))。根据上面的规则,我们发现两个矩阵要能相乘必须要满足一个条件,就是左边矩阵的列数等于右边矩阵的行数,否者两个矩阵是无法相乘的。

3: 游戏开发中的缩放,旋转平移矩阵;

   游戏开发中常用的线性变换有缩放,平移, 旋转, 这个我们通常叫做transform。而这些变换叠加在一起,就是我们在游戏世界中摆放游戏物体,我们可以把每个物体的线性变换,叠加在一起,形成一个矩阵,然后我们再来做坐标变换。

   先来看平移矩阵,我们以2D为例,  向量(x, y)平移变换到新的空间,平移就是把x, y都加上一个常量。那么平移变换矩阵为

         

   (x, y, 1)*

= (x*1 + y * 0 + dx, x*0+y*1+dy, 0*x + 0*y + 1) = (x+dx, y + dy, 1);

           

   缩放矩阵:  向量(x, y)通过缩放,到新的空间

   (x, y, 1)*

 = (x*3 + y * 0 + 0, x*0+y*3+0, 0*x + 0*y + 1) = (3x, 3y, 1);

我们叠加在一起运算一下, 先缩放还是先平移,得到的结果不一样,先平移后缩放的结果是 (x, y, 1) 先平移dx, dy, 后缩放3倍,(3x+3*dx, 3y + 3*dy, 1), 先缩放后平移, 得到的结果是(3x+dx, 3y + dy, 1)。

我们反应到矩阵,先平移后缩放,平移矩阵*缩放矩阵,如下

:

这个矩阵叠加向量(x, y, 1)得到 (3x+3*dx, 3y + 3*dy, 1)。

同理,如果是先缩放后平移,缩放矩阵*平移矩阵,如下:

 

, 这个矩阵叠加向量(x, y, 1) 得到(3x+dx, 3y+dy, 1)

同样是两个矩阵,乘法的位置不一样,得到的结果可能不一样。

4: 3D游戏中的旋转矩阵,单位矩阵, 逆矩阵;

  平移缩放,大家都好理解了,旋转矩阵不那么直观,特别是3D的。我们以大家熟悉的欧拉旋转为例。

比如我们在3D里面先绕x轴旋转 a度,再绕y轴旋转b度,再绕z轴旋转c度。这个其实就是3个空间的变换,每次变换,都对应一个旋转矩阵,然后我们按照顺序把这三个矩阵叠加起来 Rx * Ry * Rz = R旋转。根据我们上面的分析,矩阵的位置不一样,得到的结果会不一样,所以每个游戏引擎的欧拉角旋转都会有一个固定的顺序来计算, 最终就得到一个旋转矩阵。

  

最后说几个比较特殊的矩阵,单位矩阵,就是乘以这个矩阵后不会发生任何改变,相当于没有变化。

逆矩阵: 矩阵A的反向矩阵叫A的逆矩阵即: A矩阵*A的逆矩阵=单位矩阵, 两个互为逆矩阵的叠加在一起,相当于没有变化。

博图HMI多语言文本列表一键生成攻略:从Excel模板到TIA Portal的完整流程 本文详细介绍了如何利用Excel模板和TIA Portal API实现博图HMI多语言文本列表的一键生成。通过标准化Excel模板设计、解析TIA Portal的XML结构,并结合C#代码实现自动化导入,大幅提升多语言项目的开发效率。特别适用于需要支持多语言版本的自动化设备HMI界面开发。 阅读详情

相关推荐

3线SWD接线终极指南:用Jlink调试非3.3V设备的5个关键细节

本文详细解析了使用Jlink调试非3.3V设备时,3线SWD接线的5个关键细节。核心在于正确理解并连接Vref引脚以实现电压适配,避免供电冲突,并掌握精简接线法与固件修复技巧。文章以STM32F205等芯片为例,指导开发者安全、高效地进行混合电压调试。

e4f5g6h7的博客 437

3D游戏开发中的矩阵详解

矩阵很多同学没有接触过,所以感觉很难,很复杂,其实只要学过矩阵的同学都知道,矩阵运算并不难。今天我们给大家讲讲游戏开发中的矩阵的运算。这里有个游戏开发交流小组 大家可以一起来学习交流哦1:矩阵是什么?矩阵是描述线性变换的一种数学工具,线性变换指的是使用一次函数从一个空间变换到另外一个空间。例如在空间A中的一个2维向量(xa, ya)变换到空间B,使用一次线性函数变换后得(xb, yb)。xb = A*xa + B*ya + C;yb = M*xa + N*ya + D;上述变换中,xb 是由xa, ya 经

voidinit的专栏 988

关于 Python PyQt5 界面运行时提示无法初始化Qt平台的解决方案

关于 Python PyQt5 界面运行时提示无法初始化Qt平台的解决方案

smart_num_1的博客 6883

矩阵在游戏开发中的应用

矩阵在游戏开发中的平移变换: 刚开始看3D数学学了矩阵之后并不明白他在游戏中的实际应用到底是怎么回事。 比如(1,0,0)可以表示一个点,也可以表示一个向量,当作为一个点沿x轴平移一个单位之后他的结果是(2,0,0),但是作为一个向量平移之后他的结果是不变的。因此我们需要用到矩阵去进行变换。 一般使用4*4的矩阵进行变换,可能会有人想为什么不用3*3,那样不正好吗?首先先设置一个矩阵M,把一...

一个无聊的人做一些有意思的事 1万+

保姆级教程:IAR for STM8 3.11版本安装与破解全流程(附资源包)

本文提供IAR for STM8 3.11版本的详细安装与破解教程,涵盖环境准备、主程序安装、许可配置及实战验证全流程。针对新手常见问题,如许可证报错、驱动安装失败等,给出了具体解决方案,帮助开发者快速搭建稳定的STM8开发环境。

study的专栏 939

地平线天工开物AI开发平台实战:从量化训练到模型部署的完整指南

本文提供了地平线天工开物(OpenExplorer)AI开发平台的实战指南,详细解析了从量化训练到模型部署的完整流程。文章重点对比了量化感知训练(QAT)与训练后量化(PTQ)两条核心路径的优劣与适用场景,并分享了图像分类模型PTQ部署的实战经验与常见问题调试技巧,旨在帮助开发者高效地将AI模型部署到地平线AI芯片上。

weixin_29046035的博客 456

游戏开发中的矩阵与变换

游戏开发中的矩阵与变换介绍矩阵组件和恒等矩阵缩放转换矩阵旋转变换矩阵变换矩阵的基础翻译转换矩阵全部放在一起剪切变换矩阵(高级)转换的实际应用在转换之间转换位置相对于自身移动对象将变换应用于变换倒置转换矩阵这一切在3D中如何运作?表示3D旋转(高级) 介绍 阅读本教程之前,建议您通读并理解我之前发的向量数学教程,因为本教程需要向量知识。 本教程介绍了转换以及如何使用矩阵在Godot中表示它们。它不是有关矩阵的完整深入指南。变换在大多数情况下都以平移,旋转和缩放的形式应用,因此我们将重点介绍如何用矩阵表示那些变

努力是为了站在万人之中,成为别人的光 4163

数字信号的艺术演绎:用FPGA+DAC实现音乐合成器的核心原理

本文深入探讨了如何利用FPGA和DAC技术实现数字音乐合成器的核心原理,涵盖DDS架构、多波形合成、MIDI协议解析及动态包络控制等关键技术。通过详细的Verilog代码示例和硬件实现方案,展示了数字信号处理在音乐合成中的艺术演绎,为电子音乐创作提供了强大的硬件支持。

weixin_28256233的博客 389

游戏开发中的矩阵初探

游戏开发中的矩阵初探 1.矩阵在3d空间中的作用 (1)长方体A想绕(10,3,4)旋转50°且沿着x方向放大2倍且向(9,-1,8)方向平移2个单位,那么经过上面的变换后,新的长方体各个点的坐标是多少呢?应用矩阵可以很轻松的算出答案。 (2)知道子坐标系在父坐标系中的位置,可以求出子坐标系中的店在父坐标系中的位置。 2.矩阵的基础知识 矩阵能描述任意线性变换。线性变换保留了直线和平行线...

weixin_30371875的博客 103

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(三)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A.错误B.正确参考答案:BA.getB.try_getC.peekD.put参考答案:B。

qq_42135020的博客 1913

面向非平行语料的语音转换技术综述

摘要语音转换是语音及人工智能领域的一项研究课题,其目标是在保持源语音内容不变的情况下改变语音的音色,使其听上去像是由另一个目标说话人说出的,同时还需保证语音的质量和自然度。面向非平行语料的语音转换技术是当下的热门研究内容,其使用非平行的多说话人语音数据集进行模型训练,能完成多对多以及任意对任意的语音转换。对近年来面向非平行语料的语音转换进行了全面的总结和分析。首先概述了早期面向平行语料的语音转换及其缺陷,然后对当下面向非平行语料的语音转换的各类实现方法进行介绍和对比分析,最后对语音转换技术进行了总结和展望。

qq_61890005的博客 829

旋转矩阵在游戏开发中的5个实际应用

具体实现时,需要将目标方向转换为四元数,再通过矩阵运算分解出绕Y轴的旋转分量,最后用插值实现平滑过渡。在3D游戏开发中,旋转矩阵是一个强大的数学工具,能够帮助我们处理各种空间变换问题。今天我想分享几个实际开发中旋转矩阵的应用场景,以及在Unity中的实现思路。比如卡牌游戏的抽卡动画,可以用旋转矩阵控制卡牌的倾斜角度,配合透视投影产生立体感。旋转矩阵看起来复杂,但只要理解了基本原理,在游戏开发中就能发挥巨大作用。比如一个旋转的立方体撞到墙面,使用旋转矩阵可以准确分解角速度分量,实现真实的物理反弹效果。

EmeraldWolf23的博客 569

RT-Thread精通PM功耗调优 - Tickless篇

背景 让别人的思想装到自己的脑袋里,这不仅需要威逼利诱,还需要讲清楚原理。喜欢才能接受。 功耗基本的调试手段,估计前面讲了很多,或许只有少数人群可以接受。 更有极少的人,了解了整个功耗管理的体系、原理,愿意接受这样的【安排】。 这里的功耗调优思路,其实只是解决功耗问题的一种思路,并不是框架。 解决问题,自古以来,都是千奇百怪,秒在【奇】。 介绍 本篇介绍下Tickless的工作原理。 Tickless 可以理解为:tick-less,tick or little tick。 tick定.

坚韧与专注 1529

游戏开发中的正交矩阵魔法

正交矩阵是一种特殊的方阵,其转置等于逆矩阵(QᵀQ=I),具有保持向量长度和角度不变的特性。几何上,它只进行旋转或镜像变换,不会拉伸或扭曲物体。在游戏开发中,正交矩阵广泛应用于角色旋转、坐标系转换、物理模拟、光照计算和骨骼动画等场景,确保物体运动时形状不变、画面自然。例如,摄像机旋转和法线贴图处理都依赖正交矩阵来避免变形失真。简言之,正交矩阵是游戏世界的“完美变形魔法”,让虚拟世界保持真实与流畅。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 534

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

代价敏感矩阵:在游戏开发中的应用与挑战

1.背景介绍 在游戏开发中,代价敏感矩阵(Cost-Sensitive Matrix)是一种重要的技术手段,它可以帮助开发者更好地理解和优化游戏中的各种成本和收益。代价敏感矩阵是一种用于表示不同操作或决策在不同情境下的成本和收益的矩阵。这种矩阵可以帮助开发者更好地了解游戏中的各种成本和收益,从而更好地优化游戏的经济模型和玩家体验。 在本文中,我们将深入探讨代价敏感矩阵在游戏开发中的应用与挑战,...

AI天才研究院 1146

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

矩阵数乘的应用在游戏开发: 3D场景渲染与物理引擎

1.背景介绍 在游戏开发中,矩阵数乘是一个非常重要的概念和技术,它在3D场景渲染和物理引擎等方面发挥着至关重要的作用。本文将从以下几个方面进行阐述: 背景介绍 核心概念与联系 核心算法原理和具体操作步骤以及数学模型公式详细讲解 具体代码实例和详细解释说明 未来发展趋势与挑战 附录常见问题与解答 1.1 游戏开发的基本组成部分 游戏开发主要包括以下几个基本组成部分: 游戏引擎:负责处...

AI天才研究院 997

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

游戏开发中的数学和物理算法(15):矩阵的加减法

游戏开发中的数学和物理算法(15):矩阵的加减法 矩阵加法数学表示 矩阵减法数学表示: 计算机中矩阵加法的实现:     Matrix3X3 addMatrices(Matrix3X3 a, Matrix3X3 b)     {        Matrix3X3 temp;          for(int i = 0;i3;i++)          

huang9012的专栏 1128

游戏开发中的数学和物理算法(16):矩阵的乘法

游戏开发中的数学和物理算法(16):矩阵的乘法 矩阵数乘数学形式: 计算机中矩阵数乘的实现: Matrix3X3 scalarMultiply(Matrix3X3 a, float scale) {       Matrix3X3 temp;       for(int i = 0;i3;i++)       {         for(int j=0;

huang9012的专栏 1222

3D数学基础:图形与游戏开发__向量的矩阵转换

本来是想坚持写读书笔记,至少每两周一篇博客的,看来又失败了。上次写博客的时间是12月7日,变成了俩月一篇,蛋疼额,看来我还是没有我想象中的那么有毅力!这个要改! 好啦,先不说废话啦,还是进入正题吧! -------------------------------------------------------------- 这段时间开始看《3D数学基础:图形与游戏开发》这本书,突然...

daxiebiao8314的博客 170

Android游戏开发之OpenGL之视图-投影矩阵 杂谈

本文的内容有: 1.控制观察角度和观察位置。 2.模型中不需要的部分从场景中裁剪出去。 3.熟练操控良好的矩阵栈,这些矩阵栈控制着模型转换,到屏幕的映射。 4.联合多个转换来模拟复杂的运动系统,例如:太阳系和一个关节手臂。   现在开始吧。 拿相机作比喻,相机就相当于电脑屏幕。相机的中心就在屏幕的中心。    2.渲染管线。投影阶段分为两个。实在是不解。 3.令人惊讶的是矩阵

daojin505的专栏 265

2026年视频矩阵厂家技术评估:从EDID到控制协议开放度的六维筛选法

要求厂商把样机拉到现场,用你项目里真实存在的信号源和显示端跑一遍:EDID冲突场景、无缝切换逐帧测、中控发指令收反馈、断电重启后的状态恢复。在这一维度上,像讯维这样同时具备矩阵、分布式KVM和全域管控平台产品线的厂商,优势不在于某一台矩阵的参数,而在于矩阵与坐席、中控、录播之间的协议一致性——同一个指令体系下的联动,比跨品牌拼凑少一层翻译损耗。64路“两台32路级联”和“单机原生64路”在满负荷下的切换同步性和故障边界完全不同,选型时要问清楚背板带宽是按满配算的还是按典型配置算的。

2603_95485477的博客 329
上一篇: MMORPG网络游戏如何实现玩家同步
下一篇: Unity 轻量级渲染管线LWRP/URP详解
Unity_RAIN
博客等级 码龄4年 409粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值