webpack使用Ammo.js - 在react中使用Ammo.js

news2024/11/28 18:39:00

真实麻烦啊

        • [我的项目仓库 Next.js项目 仅供参考](https://gitee.com/honbingitee/three-template-next.js/tree/feature%2Fphysics/)
        • 本文展示使用`ammo.wasm.js` 结合`ammo.wasm.wasm`的wasm版本使用方法
          • 1. 配置webpack
          • 2. 导出Ammo 修改ammo.wasm.js文件
          • 3. 删除语句 通过查找 `this.Ammo= `删除这句话 这句话会报错this是undefined
          • 4. 添加`ammo.wasm.wasm`文件并在 `ammo.wasm.js`中指定位置

场景: 在react的服务端渲染框架Next.js中使用ammo.js
在原生js中使用非常方便,像three.js示例那样几乎不需要什么配置

在webpack打包的项目中使用Ammo.js还是很繁琐的

有两种选择
ammo.js js版本 目前为止是1.9M 太大了 所以没采用这个方案
ammo.wasm.js wasm版本 使用它需要配合ammo.wasm.wasm两个一起使用 一共大概1M多
文件在此处获取
https://github.com/kripken/ammo.js/tree/main/builds
也可在three文件中获取
位置:

"three/examples/jsm/libs/ammo.wasm.js";

我的项目仓库 Next.js项目 仅供参考

位于physics分支下
在这里插入图片描述

本文展示使用ammo.wasm.js 结合ammo.wasm.wasm的wasm版本使用方法

1. 配置webpack

源码中有引用fs这个node库的代码 不配置会报fs的错

如果使用create-react-app需要使用工具自定义webpack配置
create-react-app问题不少 不认为是最佳的react项目工具,可以尝试其他基于react的框架

配置如下
在这里插入图片描述
我是在框架的自定义webpack配置文件处更改 但不管怎么变化都是上图的配置
next.config.js

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    appDir: true,
  },
  compiler: {
    styledComponents: true,
  },
  webpack: (config, options) => {
    // 为了支持 ammo.js 物理引擎
    config.resolve.extensions.push('.js');
    config.resolve.fallback = { fs: false };
    config.resolve.alias.path = require.resolve('path-browserify')

    return config
  },
}

module.exports = nextConfig

2. 导出Ammo 修改ammo.wasm.js文件

在这里插入图片描述
在文件最后加入默认导出语句

至此应该已经可以打印Ammo函数了
但不能执行 执行会有报错 下面逐一解决

3. 删除语句 通过查找 this.Ammo= 删除这句话 这句话会报错this是undefined

在这里插入图片描述

4. 添加ammo.wasm.wasm文件并在 ammo.wasm.js中指定位置

查找 ammo.wasm.wasm定位位置, ammo.wasm.js中引用了ammo.wasm.wasm 但源码中引用位置不适合现代项目 需要手动指定文件位置
在next.js框架中放在public目录下的文件可以使用/xxx定位 所以我改成了 /ammo.wasm.wasm并将文件放在public目录下 其他框架可以灵活调整
在这里插入图片描述

ok至此 在我的本地项目中已经可以正常使用了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Flink】详解Flink的八种分区

简介 Flink是一个流处理框架,一个Flink-Job由多个Task/算子构成,逻辑层面构成一个链条,同时Flink支持并行操作,每一个并行度可以理解为一个数据管道称之为SubTask。我们画图来看一下: 数据会在多个算子的SubTask之间相…

【奇妙的数据结构世界】用图像和代码对链表的使用进行透彻学习 | C++

第九章 链表 目录 第九章 链表 ●前言 ●一、链表是什么? 1.简要介绍 2.具体情况 ●二、链表操作的关键代码段 1.类型定义 2.常用操作 ●总结 前言 简单来说,数据结构是一种辅助程序设计并且进行优化的方法论,它不仅讨论数据的存储与处…

打工人必知必会(一)——规章制度保险劳动合同变更

目录 参考 1、规章制度的生效要件 2、工资的发放形式 3、社会保险的基本规定 4、基本养老保险 5、医疗保险、失业保险、工伤保险、生育保险 6、劳动合同的变更 第一节 协商变更劳动合同 第二节 单方变更劳动合同 参考 《HR全程法律顾问:企业人力资源管理高…

5-6中央处理器-多处理器系统硬件多线程

文章目录一.多处理器系统(一)计算机体系结构分类1.单指令单数据流SISD2.单指令多数据流SIMD3.多指令单数据流MISD4.多指令多数据流MIMD(1)(共享内存)多处理器系统/多核处理器(2)多计算机系统(二…

逆水寒魔兽老兵服副本攻略及代码分析(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)

文章目录一、武林风云录1)老一:陈斩槐(只有四个机制,dps压力不大,留爆发打影子就行)(1)点名红色扇形区域(2)点名红色长条,注意最后还有一段大劈&a…

MongoDB入门(特点,使用场景,命令行操作,SpringData-MongoDB)

今天我们将通过这一篇博客来了解MongoDB的体系结构,命令行操作和在JAVA 当中使用SpringData-MongoDB 来 操作MongoDB。 如果没有安装的小伙伴 可以看一下 这篇文章 (59条消息) 开源的文档型数据库–MongoDB(安装)_一切总会归于平淡的博客-CS…

LeetCode[128]最长连续序列

难度:中等题目:给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n)的算法解决此问题。示例 1:输入:nums [100,4,2…

java中new的含义如何理解?

在Java中,new关键字被使用来创建一个新的对象,可以理解为创建的意思。使用关键字new来创建一个对象也叫类的实例化,使用new创建对象时,会调用构造方法初始化对象声明对象Cat cat 在栈内存中实例化对象 new Cat(参数); 在堆内存中每…

C++:类的static成员,友元和构造函数初始化列表

目录 一.类的构造函数的初始化列表 1.类的构造函数初始化列表的引入和介绍 2.初始化列表用于类的类对象成员的拷贝构造函数的调用 3.初始化列表的使用细则 4.使用初始化列表的一个注意事项 二.explicit关键字 三.C类的static成员 1.类中static修饰的成员变量 2.类中st…

Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数

文章目录一、逻辑回归参数估计基本思路1. 构建损失函数2. 损失函数求解二、利用极大似然估计进行参数估计三、熵、相对熵与交叉熵1. 熵(entropy)的基本概念与计算公式2. 熵的基本性质3. 相对熵(relative entropy)与交叉熵&#xf…

LeetCode[947]移除最多的同行或同列石头

难度:中等题目:n块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n的数组 stones,其中 stones[i] [xi, yi]…

MATLAB算法实战应用案例精讲-【人工智能】Grover量子搜索算法(补充篇)

前言 因为量子计算的并行性, 搜索问题, 比如说数据库搜索, 最短路径问题, 加密问题, 图形着色问题等, 都被视为可以做到量子加速. Grover 算法,有时也称为量子搜索算法(quantum search algorithm),指一种在量子计算机上运行的非结构化搜索算法,是量子计算的典型算法…

LeetCode[765]情侣牵手

难度:困难题目:n对情侣坐在连续排列的 2n个座位上,想要牵到对方的手。人和座位由一个整数数组 row表示,其中 row[i]是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3)&…

#A. Balanced Lineup排队(rmq模板题)

题目思路建议先看看详解rmq问题很明显这道题意是跟你一段数列,并给出多次询问,询问区间内最大值和最小值的差。如果去暴力枚举显然会超时,所以要用st算法来解决。我们要建立两个RMQ预处理内容,分别处理最大值和最小值。建一个mx[i][j]代表从i开始,长度为…

精品图表Crack:TeeChart ActiveX version 2023.1

TeeChart ActiveX version 2023 数据可视化专家,Visual Studio.Net、Visual Basic、Visual Studio 6和 IIS / ASP的图表组件 概述 TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择,以及无限数量的轴和 14 个工具箱组件…

DFS(五)最小轮盘锁

752. 打开转盘锁 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。每个拨轮可以自由旋转:例如把 9 变为 0,0 变为 9 。每次旋转都只能旋转一个拨轮的一位数字。 锁的初始数字为 0000 ,一…

【2023.01.26】定时执行专家 V6.6 兔年春节版 - 更新日志

目录 ◆ 最新版下载链接 ◆ 软件更新日志 – TimingExecutor Full Change Log ▼ 2023-01-23 V6.6 ▼ 2023-01-20 V6.5 ▼ 2022-12-25 V6.4 ▼ 2022-11-15 V6.3 ▼ 2022-10-01 V6.2 ▼ 2022-07-30 V6.1(Build 769.30072022) ▼ 2022-0…

Linux-Ubuntu入门到精通之远程操作指令

1️⃣shutdown 2️⃣查看或配置网卡信息 3️⃣网卡和IP地址 4️⃣ifconfig 5️⃣ping 6️⃣远程登录和复制文件 7️⃣ ssh 基础(重点) 8️⃣域名 和 端口号 9️⃣SSH 客户端的简单使用 1️⃣0️⃣Windows 下 SSH 客户端的安装 Putty :http:/…

数据结构 | 海量数据处理 | 位图和哈希切分的常见应用 | 布隆过滤器的使用场景

文章目录位图应用question 1question 2question 3位图的作用哈希切分布隆过滤器作为一种数据结构,哈希桶有着不同于其他数据结构的思想——直接映射,这使得在哈希结构中查找数据的效率达到了最快的O(1),比起搜索树的比较数据大小,…

数学建模——降维算法

降维 降维的意义 降低无效、错误数据对建模的影响,提高建模的准确性少量切具有代表性的数据将大幅缩减挖掘所需的时间降低存储数据的成本 需要降维的情况 维度灾难。很难有一个简洁的模型在高维空间中依旧具有鲁棒性,而随着模型复杂度的增加&#xf…