3D游戏数学基础中的计算原理及几何意义(一、向量)

《3D数学基础:图形与游戏开发》 学习笔记(一) (以下学习笔记为本人最近在学习本书的时候所记载,之中还加入了一些做项目过程中遇到的问题,以及相关知识的补充。笔者水平有限,文中不足之处,还请给予指正,谢谢~)1.将左手坐标系变换到右手坐标系,只需改变其中一个轴的方向即可。  若改变两个轴的方向,则与旋转坐标轴无异。  若改变两个轴的方向,则与旋转坐标轴无异。  左手坐标系有24种(4*2*3) ,右手坐标系也有24种。2.四种坐标系:物体坐标系、... 阅读详情

-前言-

在进一步浏览Laya3D源代码之前,让我们先补一补关于3D游戏开发的数学基础知识,并去了解为什么要这么去运算,这样更加友好的让我们去解读引擎的源代码实现。

-正文-

向量点乘

现在已知两个向量分别是\overrightarrow{a}、\overrightarrow{b},向量a\cdot b的结果是一个标量等于a1b1 + a2b2 + a3b3 + ..... + an-1bn-1 + anbn;

向量点乘描述两个向量的“相似”程度。点乘结果越大,两个向量越相近。

代码表示:

/**
 * 求点乘
 * @param a 
 * @param b 
 */
public static dot(a:Vector3,b:Vector3):number{
    return (a.x * b.x) + (a.y + b.y) + (a.z * b.z);
}

几何意义:

点乘结果还有另一个表达方式:

a\cdot b = \left \| a \right \|\left \| b \right \|\cos\Theta,根据这么一个公式就可以推导出两个向量之间的夹角公式为:\Theta =\left ( a\cdot b \div \left \| a\left \| \right \left \| b \right \| \right )

代码表示为:

/**
 * 求两个向量之间的夹角
 * @param x1 
 * @param y1 
 * @param x2 
 * @param y2 
 */
public calAngle(x1,y1,x2,y2):number{
    var dot:number = x1 * x2 + y1 * y2;
    var ma:number = Math.sqrt(Math.pow(x1,2) + Math.pow(y1,2));
    var mb:number = Math.sqrt(Math.pow(x2,2) + Math.pow(y2,2));
    var v:number = Math.acos(dot / (ma * mb));//弧度
    var t:number = v * 180 / Math.PI;//角度
    return v;
}

向量叉乘(叉积)

向量的叉乘只能用于3D向量。上面的点乘满足交换律,并且点乘结果为一个标量。向量的叉乘得到一个向量并且不满足交换律。

叉乘的表示为:a\times b

向量的叉乘满足反交换率:a\times b = -(b \times a)

几何意义

两个3D向量叉乘得到的向量一定是垂直于原来的两个向量的。

叉积之后所得到的向量的模等于a、b向量的模乘以它们的夹角,数学公式表示为:||a\times b|| = ||a|| ||b|| \sin\Theta ,它们的结果也等于a、b所组成的平行四边形的面积。

叉乘主要应用于创建垂直平面、三角形或多边形。用于确定平面法向量。

代码表示

/**
 * 叉乘
 *  |ax|   |bx|     |ay*bz - az*by|
 *  |ay| x |by|   = |az*bx - ax*bz|
 *  |az|   |bz|     |ax*by - ay*bx|
 * @param a 
 * @param b 
 * @param out 输出向量
 */
public static cross(a:Vector3,b:Vector3,out:Vector3){
    var ax = a.x,ay = a.y,az = a.z;
    var bx = b.x,by = b.y,bz = b.z;
    out.x = ay * bz - az * by;
    out.y = az * bx - ax * bz;
    out.z = ax * by - ay * bx;
}

向量的归一化

对于任意向量如[x,y]向量的归一化公式等于:\mathbb{P} = \overrightarrow{a} / ||a||,解释为a向量除以a向量的模。

向量的归一化被称为单位向量或者被称为“法线”。零向量是不能被归一化的。因为零向量的模为0,0不能被用作除数。

代码表示

/**
 * 向量归一化
 * @param a 
 * @param out 
 */
public static normalize(a, out) {
    var x = a.x, y = a.y, z = a.z;
    var len = x * x + y * y + z * z;
    if (len > 0) {//零向量不能归一化
        len = 1 / Math.sqrt(len);
        out.x = x * len;
        out.y = y * len;
        out.z = z * len;
    }
}

 

3d数学之向量详解 向量的定义: 既有大小又有方向的量称之为向量,与之相对应的是标量,标量是只有大小没有方向的量。 一个向量的一般在头上添加一个箭头表示,比如向量V,可以表示为V⃗\vec{V}V 游戏中一般以二维向量跟三维向量居多,例如一个由A点指向B点的向量,可以表示为AB⃗\vec{AB}AB,由于向量是有方向的,因此向量AB⃗\vec{AB}AB与向量BA⃗\vec{BA}BA并不等价 二维向量的表示为V=(... 阅读详情

相关推荐

OpenGL学习笔记:三维数学基础(一)坐标系、向量、矩阵

本博文为博主原创,转载请注明出处:http://blog.youkuaiyun.com/xiemotongye/article/details/9052165 接触OpenGL和计算机图形学有一段时间了,一直想写一点东西,记录自己的学习历程,或许也能够为有意愿向计算机图形学发展的菜鸟们提供一条捷径。 闲话不多说,本章主要介绍计算机图形学中三维数学的一些基础知识,主要包括2D、3D笛卡尔坐标系,向量、矩阵的

Evan的专栏 8380

Unity3D求向量间的夹角

如下图 Vector3 srcPos = new Vector3(0,0,0); Vector3 tarPos = new Vector3(0,0,-1); Vector3 srcRot = new Vector3(0,90,0); Quaternion srcQua = Quaternion.Euler(srcRot); Vector3 direction

Commander 4903

3D数学基础:图形与游戏开发入门

本文还有配套的精品资源,点击获取 简介:本书详细介绍了3D数学基础及其在图形和游戏开发中的应用,包括向量与坐标系、线性代数、几何变换、四元数、平面与直线、多边形与拓扑、光照与阴影、纹理贴图与材质、图形渲染管线、碰撞检测等关键概念。对于希望进入3D图形和游戏开发领域的初学者来说,这些知识是基础中的基础,是构建真实感图形和物理模拟的基础。本书旨在帮助初学者掌握3D数学和游戏开发...

weixin_33562004的博客 1596

求两个三维向量的夹角(带正负)

1、数学上,两个三维向量是没有正负的。但是从公垂线的角度来看,可以有方向性。参考如下: 三维空间中两个向量会有一条公垂线(向量叉乘可以求得),以公垂线为轴,将第二个向量旋转一个角度,使其与第一个向量平行.这个角度即为两向量的夹角.因为向量叉乘所得到的公垂线是一个有方向的向量,假如你用右手握住公垂线,大姆指的方向指向公垂线方向.假如你只能以食指所指的方向旋转第二个向量,那么旋转的角度就应该在0到2*PI之间.所以说值域为(-pi,pi)也是有道理的. 作者:叶飞影 链接:https://www.zhihu.c

余山 1万+

3D数学基础与游戏开发技术

矩阵是数学中的一种数组结构,由行和列组成。在图形学中,我们通常使用一个称为“齐次坐标”的概念来表示点和向量。齐次坐标允许我们在矩阵中编码更多变换信息,同时保持了线性代数的简洁性。点的齐次坐标表示:(x, y, z, 1)向量的齐次坐标表示:(x, y, z, 0)其中x、y、z是点或向量在三维空间中的坐标。矩阵变换的一个关键性质是它们可以组合。如果我们有两个变换矩阵A和B,那么先应用A再应用B的效果等同于直接应用矩阵乘积AB。

weixin_42509513的博客 763

3D图形学与游戏开发:3D数学基础实战指南

本文还有配套的精品资源,点击获取 简介:本书全面介绍3D数学在游戏开发中的基础应用,包括向量、矩阵、坐标变换、光照和纹理贴图等。深入探讨了向量运算法则、3D变换、投影、光照模型以及性能优化技巧,为游戏开发者提供了创建高性能3D游戏所需的核心数学知识。 1. 3D数学核心概念 三维图形与游戏开发不仅仅是艺术和技术的结合,还深深植根于数学之中。无论是一个简单的3...

weixin_36213081的博客 1292

Lecture02_向量与线性代数_GAMES101 课堂笔记——2020.2.14

一、向量(Vectors) 向量表示示意图: 有序实数组,用以表示在不同坐标轴上的投影长度 有行和列两种表达方式,在图形学中常以列表达 代表了一个有方向的长度 基本运算: 加法(满足结合律和交换律) 标量乘以向量(满足结合律和分配率) 点乘(内积,结果为标量,几何意义是 [公式] ,满足分配率和交换律,可用于判断两向量夹角,求向量长度,计算投影等) 叉乘(外积,结果为向量...

MumuziD的博客 597

Arm CCA架构:硬件级机密计算与安全隔离技术解析

机密计算(Confidential Computing)通过硬件级隔离技术构建可信执行环境(TEE),是当前云安全和数据隐私保护的核心方案。Armv9-A引入的CCA架构采用物理地址空间隔离和Granule保护表(GPT)机制,实现4KB颗粒度的内存访问控制。该技术通过标准化的RMI/RSI接口规范,为虚拟化环境和安全敏感应用提供硬件级保护,特别适用于金融交易、医疗数据处理等需要严格隔离的场景。相比传统TEE方案,Arm CCA在隔离等级和动态权限管理方面具有显著优势,其Realm World设计为机密计算

weixin_30905133的博客 566

向量相关 知识点

1、向量 二维 / 三维向量——Vector2 / Vector3 Vector3有两种集合意义 (1)位置:代表一个点 (2)方向:代表一个方向 2、两点决定一向量 // A和B此时是两个点 Vector3 A = new Vector3(x1,y1,z1) Vector3 B = new Vector3(x2,y2,z2) // 求向量 Vector3 AB = B - A; Vector3 BA = A - B; 可用于得到两个物体相互的方向向量 3、零向量和负向量 .

Go_Accepted的博客 2526

数字芯片后端设计实战:Memory Compiler参数配置与SRAM生成优化

本文深入解析数字芯片后端设计中Memory Compiler的核心参数配置与SRAM生成优化策略。详细探讨了容量结构、频率设定、工艺角选择等关键参数的配置要点与常见误区,并提供了从.lib/.lef文件转换到后端流程整合的实战指南,旨在帮助设计者生成面积、性能和功耗更优的存储单元。

weixin_29194255的博客 702

EBOM转MBOM实战:华为云数字工厂如何5步搞定BOM自动转换(含避坑指南)

本文详细解析了华为云数字工厂平台如何通过五步自动化流程实现EBOM到MBOM的高效转换,涵盖模型预配置、逻辑流编排、工艺属性注入等关键步骤,并提供了多工厂差异化配置、历史数据迁移等典型场景的避坑指南。该方案显著提升转换效率,降低差错率,助力企业实现数字化转型。

weixin_29215391的博客 270

世嘉MD游戏开发进阶篇【三】:向量归一化的实现及应用

向量归一化是非常有用的,游戏中经常能用到,就说大家都见过的,FC魂斗罗的敌人发射子弹就能用到了,敌人向玩家发射子弹首先要获取到向量,这个向量不能直接作为方向去用,必须要经过归一化处理才行,经过归一化处理后你才能精确的设置子弹的速度,不然子弹的速度是不可控的。 我做了个小demo来演示玩家向目标点移动的效果,跟魂斗罗的敌人向玩家发射子弹是一样的道理,效果图如下: 黑色的小方框是玩家,黑色...

独立游戏开发者DevGunstar的博客 1847

保姆级教程:在Ubuntu 22.04上搞定PX4 V1.14 + ROS2 Humble的HITL仿真(避坑实录)

本文提供在Ubuntu 22.04上配置PX4 V1.14与ROS2 Humble的HITL仿真环境的详细教程,涵盖环境准备、固件编译、QGroundControl配置、ROS2通信设置及联调测试。特别针对版本兼容性、Gazebo插件构建和MicroDDS配置等常见问题提供避坑指南,帮助开发者高效搭建无人机仿真系统。

weixin_30836759的博客 1004

3D游戏数学基础中的计算原理及几何意义(一、矩阵)

-前言- 在3D开发中,矩阵的运算是极为频繁的,几乎任何关于3D场景中的对象运算都会用到矩阵的知识。 -正文- 在我们日常游戏开发中使用到的矩阵多为方针(行数等于列数),通常为2x2、3x3、4x4的方阵。 下面列举一个一般的3x3方阵: 对角矩阵及单位矩阵 对角矩阵是矩阵中非对角线元素均为0则为对角矩阵,上面3x3方阵中当m12,m13,m23,m21,m31,m32为0是为对角矩阵...

分享即学习 2787

中兴问天 BE7200MAX SFP 光口用华为猫棒替代光猫完整配置教程

PPPoE 账号密码:若原光猫为 Route 模式,在宽带设置页可见用户名,密码需按 F12 打开浏览器开发者模式,点击密码输入框,查看代码中 “value=” 后的内容即为明文密码。若仍失败,核对 PON 类型是否与运营商网络匹配。PON 认证信息:LOID(逻辑 ID,部分地区含密码)、设备 SN 码(标签或设备信息页)、PON 类型(GPON/EPON,运营商网络类型)。电脑保持与路由器连接,访问路由器管理地址(默认通常为 192.168.5.1,可参考路由器说明书),登录后台。

Gulper_Eel的博客 3344

新手必看:5分钟搞懂FFT波束形成的底层原理(从阵列信号到频域处理)

本文深入浅出地解析了FFT波束形成的底层原理,从阵列信号采集到频域处理的全过程。通过音乐节场景类比和Python代码示例,帮助新手快速理解多目标波束形成的核心技术,包括频域转换、相位补偿和性能优化策略,适用于雷达、声呐和5G通信等领域。

pytorchlight8的博客 948

一文看懂向量的概念及其几何意义

向量

xiaoshizi933325494的博客 8109

5步VS传统WinForm!AntdUI让界面设计从“土味”到“超模”只需30秒?

摘要:墨瑾轩编程教程《AntdUI的5大魔法步骤》详解如何将传统WinForm升级为现代化UI。教程通过5个核心步骤:安装AntdUI库、控件替换、主题定制、复杂布局构建及实战案例演示,对比传统开发与AntdUI在美观度(动态阴影/动画)、开发效率(拖拽组件VS手工绘制)和主题定制(一键换肤VS重写控件)的显著差异。使用C#代码示例展示按钮动画、3D翻转、聊天界面等特效实现,帮助开发者快速掌握这一基于Ant Design风格的WinForm增强框架。(150字)

java专栏 1129

向量点乘与向量叉乘的几何意义

向量点乘(内积) 向量点乘公式为: a * b = |a| * |b| * cosθ 点乘的结果是是标量,点乘也被称为内积,是a向量在b向量上投影的长度与b向量的长度的乘积,反映了两个向量之间的相似度,两向量越相似,它们的点积就越大。 内积(点乘)的几何意义: 表征或计算两个向量之间的夹角 b向量在a向量方向上的投影 判断两个向量是否同一方向或正交(即垂直)等方向关系,具体对应关系为:...

qq826364410的专栏 9796

Python 爬虫实战:全国高校录取分数线数据爬取与院校对比分析

本文介绍了一个基于Python的高考志愿填报辅助系统,通过爬取掌上高考平台的全国高校录取分数线数据,构建本地数据库并实现智能分析。系统主要功能包括:1)使用requests+BeautifulSoup爬取院校基本信息和历年分省分科类录取线;2)通过SQLite实现数据持久化与增量更新;3)利用pyecharts生成分数线趋势图、院校对比雷达图等可视化图表;4)提供"冲稳保"三档智能选校推荐。技术栈涵盖网络爬虫、数据清洗、数据库管理和可视化分析,可为考生提供数据驱动的志愿填报决策支持。项目采用模块化设计,包含

u014481728的博客 238

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

游戏开发中的数学基础

源自《3D游戏编程大师技巧(上册)》的总结 坐标系 表示物体的相对位置信息(相对原点),主要分为以下几种: 2D坐标系: 2D 笛卡尔坐标系。主要运用有序数对来表示点的位置信息 2D 极坐标:方向和距离来定义点 笛卡尔和极坐标之间的转换。 极坐标 to 笛卡尔 x = rcos(θ) y = rsin(θ) 笛卡尔 to 极坐标 r = sqrt(x^2+y...

ZhuSenlin的博客。 1万+

怀旧版电脑GBC模拟器

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

Unity 3D 开发中需要掌握的数学基础知识概要整理(一)

目录 Unity 3D 开发中需要掌握的数学基础知识概要整理(一) 学习目的: 一、3D 数学基础知识介绍 二、Unity 中的几种常用坐标系 三、向量的基本概念 Unity 3D 开发中需要掌握的数学基础知识概要整理(一) 学习目的: 3D数学:研究在3D几何世界中的数学问题。被广泛的应用于使用计算机来模拟3D世界的领域,比如图形学,游戏,虚拟现实和动画等。 ...

仙魁XAN 4496

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Unity游戏开发中的3D数学基础详解

在3D游戏开发中,数学是实现逼真视觉效果和流畅交互体验的基础。3D数学被广泛应用于图形学、虚拟现实和游戏开发领域,它帮助我们描述和操作3D空间中的对象。Unity作为主流的游戏开发引擎,其内部实现大量依赖3D数学原理。本文将系统讲解Unity游戏开发所需的3D数学基础知识。

能带孩子会做饭 1061

线性代数的几何意义

线性代数的几何意义矩阵的几何意义矩阵由若干向量组成(可以是有限个,也可以是无限可数个),其形式和数学史赋予它的最自然的几何含义和线性空间有关(向量间的加法以及另一个数集带来的乘法为这个空间赋予了基本结构),这部分内容将在后续更新里单独列出来讲。这里不妨先简单直观一些,要么把矩阵画成几个行向量或列向量,要么画成由向量终点组成的图形,这刚好和当代计算机图形学有联系,例如大家常玩的3D游戏或某些基于矢量绘图引擎的2D游戏,就都是矩阵可视化以及矩阵变换的生动实例。如矩阵 按照列向量可表示为如下图形 如下图是在mat

qq_31493411的博客 8931

3d数学基础:图形和游戏开发(第2版)_学习笔记-《3D游戏数学基础:图形与游戏开发》...

这里来开文章记录并不断更新一下我看这本书学到的一些知识和自己的认识思考谁让知乎文章是要作为我的笔(博)记(客)而存在的呢?我学习东西是很担心忘记的,以前也有做实体笔记的习惯,但随着那些笔记本经不住时间的考验以及无法随时察看,我曾一度放弃笔记。在学习unity3d时以多次复习的方法去学习,就如我之前提到的脚本开发的基础知识课程我曾先后学习过3遍,虽然这让我更好的记住,但就有限的时间来说这样的学习方式...

weixin_29534143的博客 2984

游戏开发数学基础完全指南:向量与线性代数在游戏开发中的终极应用

想要成为优秀的游戏开发者吗?数学基础是你必须跨越的第一道门槛!🎯 在游戏开发的世界里,向量、线性代数和几何变换不仅是理论基础,更是实现炫酷游戏效果的核心工具。本文将为你揭示游戏开发数学基础的完整学习路径,帮助你从零开始掌握这些关键技能。 ## 🎮 为什么游戏开发需要扎实的数学基础? [![游戏开发路线图介绍](https://raw.gitcode.com/gh_mirrors/ga/ga

gitblog_00373的博客 684
上一篇: LayaBox引擎3D源码阅读(二、关于Camera渲染的研究)
下一篇: 3D游戏数学基础中的计算原理及几何意义(一、矩阵)
Aertims
博客等级 码龄10年 109粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值