亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Three.js引入Cannon.js及使用示例詳解

 更新時間:2022年12月09日 17:12:47   作者:隨便起一個名字吧  
這篇文章主要為大家介紹了Three.js引入Cannon.js及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

在開始之前,我們還是要解釋下什么是 Cannon.js 以及它的作用。

Cannon.js 是一個 3D 物理引擎,通過為物體賦予真實的物理屬性的方式來計算運動、旋轉(zhuǎn)和碰撞檢測。Cannon.js 相較于其他常見的物理引擎來說,比較輕量級而且完全通過 JavaScript 來實現(xiàn)。

Cannon.js 的官方文檔地址為 schteppe.github.io/cannon.js/ ,從官方介紹中也可以看到很多有趣的例子,如下所示:

本篇,我們就嘗試用 Three.js + Cannon.js 做一個簡單的示例。

首先我們通過 Three.js 創(chuàng)建一個球及一個平面,前面已經(jīng)介紹過很多關于 Three.js 如何使用,這里就不多做介紹了

大體代碼及效果

const sphere = new THREE.Mesh(
    new THREE.SphereGeometry(1, 20, 20),
    new THREE.MeshStandardMaterial()
);
scene.add(sphere);
const floor = new THREE.Mesh(
    new THREE.PlaneGeometry(20, 20),
    new THREE.MeshStandardMaterial()
);
floor.position.y = -5;
floor.rotation.x = -Math.PI / 2;
scene.add(floor);

在開始正式使用物理引擎之前,我們需要先弄清一些概念,Three.js 是渲染引擎,Cannon.js 是物理引擎。渲染引擎負責畫 UI,而物理引擎負責運動。

我們通過物理引擎打造一個和當前 UI 一樣的世界,然后讓引擎運動起來,然后將運動物體的坐標實時反映到渲染引擎中,這樣使得物理引擎和渲染引擎協(xié)同工作。

Cannon.js 打造當前 UI

所以第一步,利用 Cannon.js 打造和當前 UI 一樣的物理世界

import * as CANNON from "cannon-es";
// 創(chuàng)建物理世界
const world = new CANNON.World();
world.gravity.set(0, -9.8, 0);
// 創(chuàng)建物理小球形狀
const sphereShape = new CANNON.Sphere(1);
// 設置物體材質(zhì)
const sphereWorldMaterial = new CANNON.Material();
// 創(chuàng)建物理世界的物體
const sphereBody = new CANNON.Body({
    shape: sphereShape,
    // 位置
    position: new CANNON.Vec3(0, 0, 0),
    // 小球質(zhì)量
    mass: 1,
    // 物體材質(zhì)
    material: sphereWorldMaterial,
});
// 將物體添加至物理世界
world.addBody(sphereBody);
// 創(chuàng)建地面
const floorShape = new CANNON.Plane();
const floorBody = new CANNON.Body();
// 當質(zhì)量為0時,使得物體保持不動
floorBody.mass = 0;
floorBody.addShape(floorShape);
// 位置
floorBody.position.set(0, -5, 0);
// 旋轉(zhuǎn)
floorBody.quaternion.setFromAxisAngle(new CANNON.Vec3(1, 0, 0), -Math.PI / 2);
world.addBody(floorBody);

如此便打造了一個和 UI 一樣的物理世界,代碼很簡單,相信通過注釋就能明白做了什么事情。

下面就是讓物理引擎“動起來”,并將物體的坐標同步賦值給渲染引擎中的物體。

從文檔中可以看到,step 就是我們想要的方法,利用 step 更新物理引擎世界的物體,隨后將 sphereBodyposition 賦值給 Three.js 中的 sphere

const clock = new THREE.Clock();
function render() {
    // 更新物理引擎世界的物體
    world.step(1 / 60, clock.getDelta());
    sphere.position.copy(sphereBody.position);
    controls.update();
    renderer.render(scene, camera);
    // 渲染下一幀的時候就會調(diào)用 render 函數(shù)
    requestAnimationFrame(render);
}
render();

如此便實現(xiàn)了 Three.js 和 Cannon.js 的聯(lián)動,最終效果如下圖所示:

以上就是Three.js引入Cannon.js及使用示例詳解的詳細內(nèi)容,更多關于Three.js 引入Cannon.js的資料請關注腳本之家其它相關文章!

相關文章

  • 開發(fā)typescript項目tsconfig.json配置及選項使用解析

    開發(fā)typescript項目tsconfig.json配置及選項使用解析

    這篇文章主要為大家介紹了tsconfig.json配置及選項使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 適合面向ChatGPT編程的架構(gòu)示例詳解

    適合面向ChatGPT編程的架構(gòu)示例詳解

    這篇文章主要為大家介紹了適合面向ChatGPT編程的架構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • TypeScript Module Resolution解析過程

    TypeScript Module Resolution解析過程

    這篇文章主要為大家介紹了TypeScript Module Resolution解析過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • TypeScript使用strictnullcheck實戰(zhàn)解析

    TypeScript使用strictnullcheck實戰(zhàn)解析

    這篇文章主要為大家介紹了TypeScript使用strictnullcheck實戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解

    TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解

    這篇文章主要為大家介紹了TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • CKEditor4配置與開發(fā)詳細中文說明文檔

    CKEditor4配置與開發(fā)詳細中文說明文檔

    網(wǎng)上分享的CKEditor4中文說明很多都只是的部分使用方法,今天為大家分享一下比較完整的CKEditor4中文說明文檔
    2018-10-10
  • TypeScript與JavaScript的區(qū)別分析

    TypeScript與JavaScript的區(qū)別分析

    TypeScript可以使用JavaScript中的所有代碼和編程概念,TypeScript是為了使JavaScript的開發(fā)變得更加容易而創(chuàng)建的。推薦先精通JS的的前提下再學習TS,這樣更有利于同時學習兩門語言。
    2022-12-12
  • 詳解什么是TypeScript里的Constructor?signature

    詳解什么是TypeScript里的Constructor?signature

    這篇文章主要介紹了什么是TypeScript里的Constructor?signature詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • TypeScript快速學習入門基礎語法

    TypeScript快速學習入門基礎語法

    TypeScript的基礎語法,包括變量聲明、復合類型(數(shù)組和對象)、條件控制(if-else和switch)、循環(huán)(for和while)、函數(shù)(基礎和箭頭函數(shù),以及可選參數(shù))、面向?qū)ο筇匦裕杜e、接口、繼承)以及模塊開發(fā)中的導出和導入
    2024-07-07
  • layui.layer彈出層(子頁面)改變父頁面內(nèi)容(訪問元素和函數(shù))

    layui.layer彈出層(子頁面)改變父頁面內(nèi)容(訪問元素和函數(shù))

    當前頁面(父框架或父頁面)使用layer以iframe層的方式彈出新的窗口(子框架或子頁面)時,如何在子頁面中訪問父頁面的元素和函數(shù),從而改變父元素的頁面顯示,給用戶合理舒適的體驗。
    2023-02-02

最新評論