计算机图形学 模型矩阵的逆矩阵:如何从“世界”回归“局部”?
目录一、 引言为什么我们需要“回去”二、 核心理论逆矩阵的几何意义1. 数学推导2. 几何解释三、 实战应用为什么这很重要场景点击一个歪歪扭扭的盒子四、 代码实现基于 Three.js1. 使用封装好的 API2. 手动实现还原数学原理五、更通俗易懂的例子核心逻辑代码实现在 3D 开发如 Three.js、WebGL中我们经常使用模型矩阵将物体从局部坐标系转换到世界坐标系。但你是否思考过如何反向操作现在从数学原理与几何意义出发探讨“模型矩阵的逆矩阵”在坐标转换中的核心作用并结合射线拾取Raycasting等实际场景一、 引言为什么我们需要“回去”我们最熟悉的流程通常是这样的在建模软件里建好一个模型局部坐标Local Space。把它加载到场景中设置position、rotation、scale。渲染引擎通过模型矩阵自动帮我们把顶点的局部坐标转换成了世界坐标最终显示在屏幕上。公式很简单但是在很多高阶交互场景下比如鼠标点击检测、父子层级变换我们需要反着来——已知一个世界坐标中的点想知道它相对于某个物体中心的坐标是多少。这就涉及到了线性代数中一个极其优美的概念逆矩阵Inverse Matrix。二、 核心理论逆矩阵的几何意义如果说模型矩阵M 是一张“单程票”把点从家局部带到了世界广场那么M的逆矩阵就是一张“返程票”把点从世界广场送回家。1. 数学推导根据线性代数的基本性质2. 几何解释模型矩阵 (M)记录了物体是如何平移、旋转、缩放的。逆矩阵 (M的逆)记录了如何撤销这些平移、旋转、缩放。一句话总结模型矩阵是将局部坐标系转换到世界坐标系模型矩阵的逆就是将世界坐标系转换回局部坐标系。三、 实战应用为什么这很重要在实际工程中它解决了一个巨大的痛点碰撞检测与交互Raycasting。场景点击一个歪歪扭扭的盒子假设场景里有一个被旋转了 45 度、又被缩放过的盒子Box。你需要判断鼠标点击出的射线Ray是否击中了这个盒子。困难的做法在世界坐标系算你需要计算射线与一个“倾斜的立方体”的交点。这涉及复杂的立体几何运算计算量大且容易出错。聪明的做法在局部坐标系算利用逆矩阵获取盒子的模型矩阵求逆得到 M的逆用 M的逆 把鼠标发出的射线World Ray变换一下变回盒子的局部空间。奇迹发生了在局部空间里盒子永远是正正方方的Axis-aligned中心通常在原点。我们只需要判断“一条歪射线”和“一个正盒子”是否相交。这仅仅是简单的if (x minX x maxX)的运算速度快了几个数量级Three.js 的Raycaster底层正是利用了这个逻辑才实现了高效的拾取。四、 代码实现基于 Three.js在 Three.js 中虽然封装好的worldToLocal方法屏蔽了细节但理解底层原理不是更香吗1. 使用封装好的 APIconst mesh new THREE.Mesh(geometry, material); scene.add(mesh); // 假设有一个世界坐标点 const worldPoint new THREE.Vector3(10, 5, 0); // 直接转换回 mesh 的局部坐标 mesh.worldToLocal(worldPoint); console.log(worldPoint); // 输出该点相对于 mesh 中心的位置2. 手动实现还原数学原理const worldPoint new THREE.Vector3(10, 5, 0); // 1. 获取物体的世界变换矩阵 const matrixWorld mesh.matrixWorld; // 2. 计算逆矩阵 const inverseMatrix new THREE.Matrix4(); inverseMatrix.copy(matrixWorld).invert(); // 求逆 // 3. 应用逆矩阵 P_local M_inv * P_world const localPoint worldPoint.clone().applyMatrix4(inverseMatrix); console.log(localPoint);五、更通俗易懂的例子判定一个点是否在一个box内呢知道box的模型矩阵及点的世界坐标核心逻辑困难模式世界坐标系你的 Box 是歪的被旋转过点也是任意的。你需要判断点是否在六个倾斜面的“中间”这需要算点到平面的距离非常麻烦。简单模式局部坐标系利用模型矩阵的逆把世界坐标的点变换回 Box 的局部坐标在局部坐标系里Box 永远是正正方方的通常中心在原点或者是已知的 min/max 范围。你只需要做最简单的大小比较AABB 检测。代码实现// 假设 boxMesh 是你的物体pointWorld 是世界坐标中的点(Vector3) function isPointInBox(pointWorld, boxMesh) { // 1. 获取逆矩阵 (World - Local) // 注意在 Three.js 中为了性能最好把 inverseMatrix 缓存起来不要每帧 new const inverseMatrix boxMesh.matrixWorld.clone().invert(); // 2. 将世界坐标点转换到局部坐标系 const pointLocal pointWorld.clone().applyMatrix4(inverseMatrix); // 3. 获取 Box 的局部几何边界 (AABB) // 如果是标准几何体通常 geometry.boundingBox 就可以拿到 min 和 max // 如果没有计算过需要先 boxMesh.geometry.computeBoundingBox(); const min boxMesh.geometry.boundingBox.min; const max boxMesh.geometry.boundingBox.max; // 4. 简单的 AABB 判定 if (pointLocal.x min.x pointLocal.x max.x pointLocal.y min.y pointLocal.y max.y pointLocal.z min.z pointLocal.z max.z) { return true; // 在里面 } return false; // 在外面 }

相关新闻

Discuz CC 防护规则

Discuz CC 防护规则

针对日活<200的小型论坛(个人 / 小社群运营) 🔥最优配置(直接后台填写,适配 99% 低日活论坛) 最优配置:访问时间 60 秒 → 访问次数400 次 → 封锁时间180 秒(3 分钟&a…

2026/7/5 14:14:25 阅读更多 →
删除有序数组中的重复项(c语言版)

删除有序数组中的重复项(c语言版)

一个普通的随机数组&#xff0c;里面有很多的重复数字&#xff0c;我们需要把里面的重复数字去掉一个&#xff0c;并保持顺序一致 1、代码预览 int removeDuplicates(int *num,int numSize) { if(numSize0){return 0;}int i1;for(int j1;j<numSize;j){ if(nums[j]nums[i-…

2026/7/3 11:16:50 阅读更多 →
C++_--

C++_--

map

2026/7/4 16:40:17 阅读更多 →

最新新闻

实战指南:用FoundationPose实现6D物体姿态估计与跟踪的最佳实践

实战指南:用FoundationPose实现6D物体姿态估计与跟踪的最佳实践

实战指南&#xff1a;用FoundationPose实现6D物体姿态估计与跟踪的最佳实践 【免费下载链接】FoundationPose [CVPR 2024 Highlight] FoundationPose: Unified 6D Pose Estimation and Tracking of Novel Objects 项目地址: https://gitcode.com/gh_mirrors/fo/FoundationPos…

2026/7/5 16:00:53 阅读更多 →
锂电硬件级过压保护方案设计与STM32实现

锂电硬件级过压保护方案设计与STM32实现

1. 项目背景与核心器件选型锂离子电池因其高能量密度和长循环寿命&#xff0c;已成为便携式电子设备和储能系统的首选电源方案。但过充电是导致锂离子电池热失控甚至起火爆炸的主要诱因之一&#xff0c;这让我在去年开发户外储能电源时深有体会。当时测试组反馈&#xff0c;在快…

2026/7/5 15:58:53 阅读更多 →
Gemma-4 E4B技术深度解析:如何用4.5B有效参数实现多模态智能

Gemma-4 E4B技术深度解析:如何用4.5B有效参数实现多模态智能

Gemma-4 E4B技术深度解析&#xff1a;如何用4.5B有效参数实现多模态智能 【免费下载链接】gemma-4-E4B 项目地址: https://ai.gitcode.com/hf_mirrors/google/gemma-4-E4B 当你面对一个需要同时处理文本、图像、音频和视频的AI项目时&#xff0c;是否曾为选择合适模型而…

2026/7/5 15:56:41 阅读更多 →
Vue3企业级数据可视化大屏架构设计:应对多分辨率适配与实时渲染挑战

Vue3企业级数据可视化大屏架构设计:应对多分辨率适配与实时渲染挑战

Vue3企业级数据可视化大屏架构设计&#xff1a;应对多分辨率适配与实时渲染挑战 【免费下载链接】IofTV-Screen-Vue3 一个基于 vue3、vite、Echart 框架的大数据可视化&#xff08;大屏展示&#xff09;模板 项目地址: https://gitcode.com/gh_mirrors/io/IofTV-Screen-Vue3 …

2026/7/5 15:56:41 阅读更多 →
Gin-Vue-Admin代码生成器字段编辑:5个深度优化技巧与架构解析

Gin-Vue-Admin代码生成器字段编辑:5个深度优化技巧与架构解析

Gin-Vue-Admin代码生成器字段编辑&#xff1a;5个深度优化技巧与架构解析 【免费下载链接】gin-vue-admin &#x1f680;ViteVue3Gin的开发基础平台&#xff0c;支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下…

2026/7/5 15:54:41 阅读更多 →
3分钟掌握 facetype.js:终极字体转换工具完全指南

3分钟掌握 facetype.js:终极字体转换工具完全指南

3分钟掌握 facetype.js&#xff1a;终极字体转换工具完全指南 【免费下载链接】facetype.js typeface.js generator 项目地址: https://gitcode.com/gh_mirrors/fa/facetype.js facetype.js 是一个强大的在线字体转换工具&#xff0c;专门用于将标准字体文件转换为 type…

2026/7/5 15:54:41 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻