0

0

HTML5建模怎么实现碰撞检测_模型交互碰撞逻辑设置【详解】

星夢妙者

星夢妙者

发布时间:2026-01-06 19:59:53

|

487人浏览过

|

来源于php中文网

原创

Three.js 中 Raycaster 是最常用且可靠的碰撞检测方案,通过射线与几何体相交实现点击、视线等交互响应,需正确收集可交互 Mesh 并优化性能。

html5建模怎么实现碰撞检测_模型交互碰撞逻辑设置【详解】

Three.jsRaycaster 是最常用且可靠的碰撞检测方案

原生 HTML5 不提供 3D 碰撞检测能力,所谓“HTML5 建模”实际依赖 WebGL 库(如 Three.js)。真正在运行时做模型间碰撞判断的,几乎都用 Raycaster 模拟射线与几何体相交——它不计算物理碰撞,但能精准响应点击、视线、投掷等交互场景。

常见错误是直接对 Mesh 对象调用 intersects,但 Three.js 的 Raycaster 必须配合场景中真实渲染的 Object3D 子集(通常是 meshgroup)才能工作。

  • 必须在渲染循环(requestAnimationFrame)中更新 Raycaster.setFromCamera,否则坐标系错乱
  • 被检测对象需启用 castShadow = truereceiveShadow = true(非必需,但影响光照反馈)
  • 若模型由多个子 Mesh 组成(如 GLTF 导入),需递归遍历 scene.traverse 收集所有可交互 Mesh

GLTF 模型加载后如何正确设置可碰撞对象

GLTFLoader 加载的模型默认是 Group,其子节点可能是嵌套多层的 Mesh。直接把整个 Group 传给 Raycaster.intersectObjects 会失败,因为 Raycaster 只检查 MeshLinePoints 这类可渲染对象。

正确做法是提取所有叶子级 Mesh 并打上自定义标记,方便后续过滤:

立即学习前端免费学习笔记(深入)”;

loader.load('model.glb', (gltf) => {
  const meshes = [];
  gltf.scene.traverse((obj) => {
    if (obj.isMesh) {
      obj.userData.collidable = true; // 标记为可碰撞
      obj.userData.id = 'door_01';   // 可选:绑定业务 ID
      meshes.push(obj);
    }
  });
  scene.add(gltf.scene);
  collidableMeshes = meshes; // 全局或闭包保存
});

注意:不要修改 obj.materialtransparentopacity 后忘记设 depthWrite: false,否则射线可能穿模。

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

下载

Raycaster.intersectObjects 性能瓶颈与优化技巧

每帧都对上百个 Mesh 调用 intersectObjects 会导致卡顿。Three.js 官方建议控制在 50 个以内参与检测的对象。

  • 用空间划分:只检测摄像机视锥体内的对象(frustum.containsPoint(mesh.position)
  • 对静态模型预生成 BufferGeometrybbox(包围盒),先做粗筛:bbox.intersectsSphere(ray.origin, ray.far)
  • 避免每帧重建 Raycaster 实例,复用单例并仅调用 .set().intersectObjects()
  • 移动端慎用 raycaster.params.Line.threshold,部分 Android WebView 不支持

两个 3D 模型之间是否“真正相碰”?别信 distanceTo

新手常误用 mesh1.position.distanceTo(mesh2.position) 判断碰撞——这只能测中心点距离,对长条形、旋转后模型完全失效。

真正需要实体级碰撞(如门碰到人、箱子堆叠),必须引入物理引擎,例如:

  • cannon-es:轻量、TypeScript 原生,适合简单刚体
  • ammo.js:完整 Bullet 物理移植,性能高但体积大(~3MB)
  • rapier:Rust 编译,API 清晰,WASM 加速,推荐新项目

即使引入物理引擎,Three.js 渲染层和物理层的坐标、旋转仍需手动同步。漏掉 body.quaternion.copy(mesh.quaternion)mesh.position.copy(body.position),模型就会“漂移”或“穿模”。

相关专题

更多
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全

C++系统编程中的内存管理是指 对程序运行时内存的申请、使用和释放进行精细控制的机制,涵盖了栈、堆、静态区等不同区域,开发者需要通过new/delete、智能指针或内存池等方式管理动态内存,以避免内存泄漏、野指针等问题,确保程序高效稳定运行。它核心在于开发者对低层内存有完全控制权,带来灵活性,但也伴随高责任,是C++性能优化的关键。

10

2025.12.22

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

500

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

421

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

11

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

11

2025.12.30

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

73

2025.12.30

html5怎么做网站教程
html5怎么做网站教程

想从零开始学做网站?这份《HTML5怎么做网站教程》合集专为新手打造!涵盖HTML5基础语法、页面结构搭建、表单与多媒体嵌入、响应式布局及与CSS3/JavaScript协同开发等核心内容。无需编程基础,手把手教你用纯HTML5创建美观、兼容、移动端友好的现代网页。附实战案例+代码模板,快速上手,轻松迈出Web开发第一步!

106

2025.12.31

HTML5建模教程
HTML5建模教程

想快速掌握HTML5模板搭建?本合集汇集实用HTML5建模教程,从零基础入门到实战开发全覆盖!内容涵盖响应式布局、语义化标签、Canvas绘图、表单验证及移动端适配等核心技能,提供可直接复用的模板结构与代码示例。无需复杂配置,助你高效构建现代网页,轻松上手前端开发!

18

2025.12.31

java成品网站源码资源大全
java成品网站源码资源大全

本专题整合了java成品网站源码相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号