碰撞检测窄阶段:接触点、法线和穿透深度详解
开场一个粗筛之后到底怎么精确判断的追问小王刚理解了物理流水线又冒出新疑问“老鸟前面说物理检测分’宽阶段’和’窄阶段’。宽阶段是粗筛’可能碰的物体对’我懂了。那窄阶段具体干什么它不光要判断’到底碰没碰’还要算出’接触点、法线、穿透深度’——这三个东西分别是什么为什么动态刚体必须要它们引擎具体怎么算出来的”老鸟说“窄阶段是碰撞检测的’精密工序’宽阶段只是快速排除明显不碰的窄阶段才真正’一对一精确检测’而且它的产出——接触点、法线、穿透深度——是后面’物体怎么弹开’的唯一依据今天讲透这三样” 第一幕先定位窄阶段在流水线的位置宽阶段 vs 窄阶段碰撞检测分两个阶段 ① 宽阶段(Broad Phase): → 快速粗筛可能碰的物体对 → 用AABB包围盒等快速排除 → 目标: 排除明显不碰的(省时间) ② 窄阶段(Narrow Phase): ← 本篇 → 对宽阶段筛出的可能碰的对 → 精确检测到底碰没碰 → 并算出详细碰撞信息! ↓ 宽阶段粗筛,窄阶段精算!为什么要分两阶段如果直接对所有物体做精确检测: → N个物体两两精确检测 → 太贵! ↓ 先用宽阶段(便宜)排除大部分不碰的: → 只剩少量可能碰的对 → 再对这少数做窄阶段(贵但精确) ↓ 两阶段配合 又快又准!生动理解两阶段两阶段像安检的粗筛细查 宽阶段像金属探测门 → 快速过一遍,响的才要细查 → 排除大部分没问题的人 窄阶段像开箱细查 → 对响的人仔细检查 → 精确找出到底带了什么 ↓ 先粗筛再细查 高效! 第二幕窄阶段的第一职责——精确判断碰没碰宽阶段的局限宽阶段用包围盒(AABB)粗判 → 两个盒子重叠 可能碰 ↓ ⚠️ 但盒子重叠不代表真的碰! 如: 两个斜放的胶囊 → 包围盒重叠了,实际没接触! ↓ 所以窄阶段要精确判断真的碰没碰!图示宽阶段误判两个斜胶囊: ╱ 包围盒: ┌───┐ ╲ │ ╱ │ ← 盒子重叠 ╱ │╱ │ └───┘ 包围盒重叠 → 宽阶段说可能碰 实际两胶囊没碰! ↓ 窄阶段: 用精确几何判断真没碰!窄阶段的精确检测窄阶段根据实际形状精确判断 - 两个球: 算圆心距离 vs 半径和 - 凸体: 用GJK算法 - 精确到几何层面! ↓ 输出: 真的碰了还是没碰生动理解精确判断窄阶段判断像从大概位置重叠到真的接触 宽阶段: 这俩物体的地盘重叠了,可能碰 窄阶段: 仔细看,它俩表面真的贴上了吗? ↓ 精确到形状的真实接触! 第三幕核心产出①——接触点(Contact Point)⭐接触点是什么接触点(Contact Point) 两个物体实际接触的位置 ↓ 就是: 碰撞发生在空间中的哪个点 ↓ 比如: 球撞墙 → 接触点是球贴上墙的那个点为什么动态需要接触点动态刚体弹开时,力要作用在接触点上 ↓ 为什么? 因为力作用点影响是否产生旋转! ↓ 例子: 你推箱子 - 推箱子正中 → 箱子直线滑 - 推箱子边角 → 箱子会转起来! ↓ 接触点决定了碰撞后平移旋转的表现!接触点可能有多个⚠️ 接触不一定是一个点 球撞墙: 1个接触点 盒子平放地面: 4个接触点(四个角) ↓ 多个接触点组成接触流形(Contact Manifold) → 描述完整的接触区域 ↓ 平面接触需要多点才能稳定支撑!生动理解接触点接触点像两物体亲吻的位置 球吻墙 → 一个吻点(1接触点) 书平放桌面 → 四角都贴着(4接触点) ↓ 力作用在这些点上 → 决定物体是滑、是转、还是稳稳撑住! 第四幕核心产出②——碰撞法线(Normal)⭐碰撞法线是什么碰撞法线(Contact Normal) 碰撞的方向 物体该往哪个方向分开 ↓ 是一个方向向量: 指向两物体应该分离的方向 ↓ 比如: 球从上砸地 → 法线朝上(球该往上弹)为什么动态需要法线⭐法线决定物体往哪个方向弹开 ↓ 碰撞冲量沿着法线方向施加: - 球砸地,法线朝上 → 球往上弹 - 球撞左墙,法线朝右 → 球往右弹 ↓ 没有正确的法线 → 不知道往哪弹! → 这就是凹网格矛盾法线的问题根源!图示法线球砸地面 ⬤ 球 ↑ 法线(朝上) ━━━━━━━━━ 地面 ↓ 球沿法线方向(朝上)弹开! 球撞右墙 ⬤ → 法线朝左 ┃墙 ↓ 球沿法线(朝左)弹回!生动理解法线法线像碰撞的反弹方向指示牌 球砸地,指示牌指向上→ 球往上弹 球撞墙,指示牌指离开墙→ 球弹回 ↓ 法线告诉引擎该往哪个方向把物体推开! ↓ 凹网格问题: 多个三角形给多个矛盾指示牌 → 引擎不知听谁的 → 抖动! 第五幕核心产出③——穿透深度(Penetration Depth)⭐穿透深度是什么穿透深度(Penetration Depth) 两个物体陷进彼此多深 ↓ 因为物理是离散步进(每帧算一次): → 物体会先轻微陷进去才被检测到 ↓ 穿透深度 需要把它们推开多少才不重叠为什么会有穿透物理每帧步进(不连续): 这一帧: 球在墙外一点 下一帧: 球已经陷进墙里一点了! ↓ 检测到时球已经穿进去一点 → 这个进去的量就是穿透深度 ↓ 求解器要用它把球推回到刚好不穿!为什么动态需要穿透深度⭐穿透深度决定分离的力度 陷得越深 → 要推开的力越大 ↓ 求解器: 陷进去2cm → 施加冲量让它退出2cm ↓ 没有穿透深度 → 不知道推多少 → 要么推不够(还嵌着) → 要么推太多(弹飞)! ↓ 这就是凹网格多个矛盾深度导致震荡的根源!图示穿透深度球陷进地面 ⬤ ━━━━━╪━━━ 地面 ↕ 穿透深度(陷进0.02米) ↓ 求解器: 把球往上推0.02米 → 刚好不穿!生动理解穿透深度穿透深度像陷进泥里多深 脚陷泥里2cm → 要拔出2cm才出来 脚陷泥里5cm → 要拔出5cm ↓ 陷多深就拔多少 → 精确恢复! ↓ 凹网格: 每个三角形说陷的深度不同 → 该拔多少? 引擎乱了 → 震荡!⚙️ 第六幕三样产出如何配合求解⭐三样信息组合成接触约束窄阶段输出的三样 接触点 法线 穿透深度 ↓ 组合成一个接触约束(Contact Constraint) → 交给约束求解器 ↓ 求解器据此算出: 在接触点、沿法线方向、 施加多大冲量把物体分开完整的碰撞响应逻辑求解器用三样信息算碰撞响应 ① 法线 → 决定弹开方向 ② 穿透深度 → 决定推开力度(位置修正) ③ 接触点 → 决定力作用位置(是否旋转) ↓ 三者齐全 → 物体正确、稳定地弹开! ↓ 缺一不可!生动理解配合三样配合像精确处理一次碰撞 法线(方向): 往这边推! 穿透深度(力度): 推这么多! 接触点(位置): 在这个点推! ↓ 方向力度位置齐全 → 物体完美弹开(该滑滑该转转)! ↓ 这就是为什么动态必须要这三样! 第七幕回连——为什么凹网格产出不了好的三样现在能深刻理解凹网格的问题凹网格逐三角形检测: 接触点: 多个三角形 → 一堆零散接触点 → 难以组织成一致的接触流形 法线: 每个三角形一个法线 → 互相矛盾! → 不知往哪弹(抖动/弹飞) 穿透深度: 每个三角形一个深度 → 不一致! → 不知推多少(震荡) ↓ 三样全部不可靠、矛盾 → 动态求解崩溃! ↓ 凸体: 三样都唯一、一致 → 完美!生动理解回连窄阶段三样产出 动态物理的原料: 凸体: 提供纯净一致的原料 → 求解器做出稳定的碰撞响应 凹网格: 提供矛盾混乱的原料 → 求解器做出崩溃的结果(抖动弹飞) ↓ 原料质量决定成品! 凸性保证了原料纯净!✅ 窄阶段理解检查清单定位 □ 明白窄阶段在宽阶段之后⭐ □ 明白宽阶段粗筛、窄阶段精算 □ 明白为什么分两阶段(效率) 第一职责 □ 明白窄阶段精确判断真碰没碰 □ 明白宽阶段包围盒会误判 三样产出 □ 明白接触点接触的位置(影响旋转)⭐ □ 明白法线弹开的方向⭐ □ 明白穿透深度陷多深(决定推多少)⭐ 配合 □ 明白三样组成接触约束 □ 明白求解器用三样算碰撞响应 □ 明白方向力度位置缺一不可 回连 □ 明白凹网格三样都矛盾→动态崩溃 □ 明白凸体三样唯一一致→稳定 一句话总结窄阶段Narrow Phase的职责与目标窄阶段是碰撞检测的第二阶段在宽阶段粗筛可能碰的物体对之后负责对每一对可能碰的物体做精确的一对一检测。它有两大职责【职责一·精确判断】宽阶段只用包围盒粗判盒子重叠就算可能碰会误判——比如两个斜胶囊包围盒重叠实际没碰窄阶段则根据真实形状精确判断到底碰没碰球算圆心距离、凸体用 GJK。【职责二·产出碰撞信息】这是窄阶段的核心价值产出三样关键数据① 接触点Contact Point——碰撞在空间中的实际位置决定力作用点推正中直线滑、推边角会旋转平面接触会有多个点组成接触流形② 碰撞法线Normal——物体该往哪个方向分开的方向向量决定弹开方向球砸地法线朝上就往上弹③ 穿透深度Penetration Depth——两物体陷进彼此多深因为物理离散步进会先轻微穿透才检测到决定要把它们推开多少陷 2cm 就推 2cm。这三样组合成接触约束交给求解器求解器据此算出在接触点、沿法线方向、施加多大冲量把物体分开——方向法线 力度穿透深度 位置接触点三者缺一不可物体才能正确稳定地弹开。这也彻底解释了凹网格的问题逐三角形检测产出的接触点零散、法线互相矛盾、穿透深度不一致——三样原料全都混乱求解器自然崩溃抖动/弹飞/震荡而凸体三样都唯一一致所以动态稳定核心口诀窄阶段在宽阶段粗筛之后做精确一对一检测职责一精确判断真碰没碰(包围盒会误判)职责二产出三样接触点是位置影响旋转法线是方向决定往哪弹穿透深度是陷多深决定推多少三样组成接触约束交求解器方向力度位置缺一不可凹网格三样矛盾崩溃凸体三样一致稳定 窄阶段三样产出速查表产出是什么决定什么凹网格问题接触点碰撞的位置力作用点(是否旋转)⭐零散多点难组织法线分离的方向往哪弹⭐多三角形矛盾→抖动穿透深度陷多深推多少⭐多值不一致→震荡 一句话记住核心窄阶段在宽阶段粗筛后做精确检测核心价值是产出三样碰撞信息接触点位置影响旋转 法线方向决定往哪弹 穿透深度陷多深决定推多少。这三样组成接触约束交给求解器算冲量——凸体三样唯一一致所以稳定凹网格三样矛盾所以崩溃 延伸窄阶段在碰撞流水线的承上启下【窄阶段是碰撞流水线的信息生产核心】 完整碰撞流水线的承上启下: 宽阶段(上游): AABB/空间划分粗筛 → 给窄阶段可能碰的对 ↓ 窄阶段(本篇·核心): ← 生产碰撞信息 精确检测 产出接触点/法线/深度 → 给求解器接触约束 ↓ 约束求解器(下游): 用三样信息迭代算冲量 → 让物体正确弹开 ↓ 积分: 更新速度和位置 ↓ 窄阶段是承上启下的信息枢纽: - 承接宽阶段的粗筛结果 - 生产求解器需要的精确信息 ↓ 它的产出质量,直接决定物理表现! (这也是凸性如此重要的原因)

相关新闻

视频动作迁移保姆级教程:ComfyUI-MimicMotionWrapper 让任意图片跟着视频动起来

视频动作迁移保姆级教程:ComfyUI-MimicMotionWrapper 让任意图片跟着视频动起来

视频动作迁移保姆级教程:ComfyUI-MimicMotionWrapper 让任意图片跟着视频动起来 【免费下载链接】ComfyUI-MimicMotionWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-MimicMotionWrapper 你有没有过这样的冲动:手里有一张很喜欢…

2026/8/18 19:05:20 阅读更多 →
APNG4Android 完全指南:Android 高性能播放 APNG、Animated WebP、GIF 与 AVIF 动画

APNG4Android 完全指南:Android 高性能播放 APNG、Animated WebP、GIF 与 AVIF 动画

APNG4Android 完全指南:Android 高性能播放 APNG、Animated WebP、GIF 与 AVIF 动画 【免费下载链接】APNG4Android Android animation support for APNG & Animated WebP & Gif & Animated AVIF, High performance 项目地址: https://gitcode.com/gh…

2026/8/18 19:05:20 阅读更多 →
【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_49.[第5章 自适应RAG] 用户满意度追踪:点赞、点踩和详细反馈

【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_49.[第5章 自适应RAG] 用户满意度追踪:点赞、点踩和详细反馈

你的RAG上线即巅峰?别闹了,没有用户反馈的生成式AI就是闭着眼开法拉利,油门一响,坟头草长。本文将撕开自适应RAG最被忽视的一环——用户满意度追踪,从点赞点踩的轻量设计到详细反馈的链路追踪,手把手教你把…

2026/8/18 19:05:15 阅读更多 →

最新新闻

基于ChatGPT与Raspberry Pi Pico的AI情绪灯:从自然语言到智能灯光控制

基于ChatGPT与Raspberry Pi Pico的AI情绪灯:从自然语言到智能灯光控制

1. 项目概述:当AI成为你的专属灯光师最近在捣鼓一个挺有意思的小玩意儿,我把它叫做“AI情绪灯”。核心想法很简单:让一个智能灯,能根据你当下的心情、状态,甚至只是你随口说的一句话,自动调节出最匹配的灯光…

2026/8/19 4:04:27 阅读更多 →
SonicWeave:复杂系统中的过滤导航艺术与实践

SonicWeave:复杂系统中的过滤导航艺术与实践

1. 项目概述:当声音遇见编织,在过滤的疆域中穿行最近在后台和社区里,看到不少朋友在讨论“Filter”相关的话题,从Spring Boot里多个Filter的执行顺序,到Python里map、filter、zip这几个内置函数的区别,甚至…

2026/8/19 4:04:27 阅读更多 →
RT-Thread下基于DMA UART的Modbus-RTU多寄存器读写驱动实现

RT-Thread下基于DMA UART的Modbus-RTU多寄存器读写驱动实现

1. 项目缘起:为什么要在RT-Thread上用DMA玩转Modbus-RTU?搞嵌入式通信的,Modbus-RTU协议绝对是绕不开的“老朋友”。它简单、可靠,在工业控制、传感器采集这些领域遍地开花。但真要在资源有限的嵌入式MCU上把它跑得又稳又快&#…

2026/8/19 4:04:27 阅读更多 →
基于Arduino Nano与FFT的音乐频谱可视化项目实战

基于Arduino Nano与FFT的音乐频谱可视化项目实战

1. 项目概述:用Arduino Nano点亮你的音乐频谱如果你手头正好有一块闲置的Arduino Nano,又想让桌面随着音乐节奏“舞动”起来,那么这个音乐频谱可视化项目绝对是你的不二之选。它不是什么高深莫测的科研项目,而是一个融合了模拟电路…

2026/8/19 4:04:27 阅读更多 →
PFAgent:基于AI智能体的交互式电网潮流计算与自进化分析平台

PFAgent:基于AI智能体的交互式电网潮流计算与自进化分析平台

1. 项目概述:当电网分析遇上“会思考”的智能体如果你在电力系统领域工作,尤其是从事电网规划、运行或分析,那么“潮流计算”这个词对你来说一定不陌生。它就像是电网的“心电图”,通过复杂的数学方程,告诉我们电能在网…

2026/8/19 4:04:27 阅读更多 →
树莓派PWM驱动模拟表头:DIY复古空气质量监测仪

树莓派PWM驱动模拟表头:DIY复古空气质量监测仪

1. 项目概述:当复古指针遇见现代数据最近在工作室里捣鼓空气质量传感器,看着屏幕上跳动的数字,总觉得少了点“感觉”。数字固然精确,但那种直观、带有物理反馈的视觉体验,是纯数字显示无法替代的。于是,一个…

2026/8/19 4:03:27 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →