微信小程序threejs三維開發

微信小程序threejs開發

import?*?as?THREE?from?'three';

const?{

performance,

??document,

??window,

??HTMLCanvasElement,

??requestAnimationFrame,

??cancelAnimationFrame,

core,

??Event,

??Event0

}?=?THREE?.DHTML

import?Stats?from?'three/examples/jsm/libs/stats.module.js';

import?{?OrbitControls?}?from?'three/examples/jsm/controls/OrbitControls.js';

import?{?OrbitControls0?}?from?'three/examples/jsm/controls/OrbitControls0.js';

import?{?RoomEnvironment?}?from?'three/examples/jsm/environments/RoomEnvironment.js';

import?{?GLTFLoader?}?from?'three/examples/jsm/loaders/GLTFLoader.js';

import?{?DRACOLoader?}?from?'three/examples/jsm/loaders/DRACOLoader.js';

var?requestId

Page({

??onUnload()?{

????cancelAnimationFrame(requestId,?this.canvas)

????this.worker?&&?this.worker.terminate()

if(this.canvas)?this.canvas?=?null

????setTimeout(()?=>?{

??????if?(this.renderer?instanceof?THREE.WebGLRenderer)?{

????????this.renderer.dispose()

????????this.renderer.forceContextLoss()

????????this.renderer.context?=?null

????????this.renderer.domElement?=?null

????????this.renderer?=?null

??????}

????},?10)

??},

??webgl_touch(e){

????const?web_e?=?(window.platform=="devtools"?Event:Event0).fix(e)

????this.canvas.dispatchEvent(web_e)

??},

??onLoad()?{

????document.createElementAsync("canvas",?"webgl2",this).then(canvas?=>?{

??????this.canvas?=?canvas

??????this.body_load(canvas).then()

????})

??},

??async?body_load(canvas3d)?{

????let?mixer;

????const?clock?=?new?THREE.Clock();

????const?container?=?document.getElementById('container');

????const?stats?=?new?Stats();

????container.appendChild(stats.dom);

????const?renderer?=?new?THREE.WebGLRenderer(?{?antialias:?true?}?);

????renderer.setPixelRatio(?window.devicePixelRatio?);

????renderer.setSize(?window.innerWidth,?window.innerHeight?);

????container.appendChild(?renderer.domElement?);

????const?pmremGenerator?=?new?THREE.PMREMGenerator(?renderer?);

????const?scene?=?new?THREE.Scene();

????????var?AmbientLight?=?new?THREE.AmbientLight(0xffffff,1)

????scene.add(AmbientLight)

????///

????/*

??????????var?spotLight?=?new?THREE.SpotLight(0xaaaaaa,?1)?//聚光燈

????????spotLight.position.set(0,?0,?10)

????????spotLight.lookAt(scene.position)

????????scene.add(spotLight)*/

????//???

/*

????var?directionalLight?=?new?THREE.DirectionalLight(0xaaaaaa,?1)?//方向光

????directionalLight.position.set(0,?0,?10)

????directionalLight.lookAt(scene.position)

????scene.add(directionalLight)*/

????

????scene.background?=?new?THREE.Color(?0xbfe3dd?);

????scene.environment?=?pmremGenerator.fromScene(?new?RoomEnvironment(?renderer?),?0.04?).texture;


?

????const?camera?=?new?THREE.PerspectiveCamera(40,?window.innerWidth?/?window.innerHeight,?1,?100);

????camera.position.set(5,?2,?8);

????const?controls?=?new?(window.platform=="devtools"?OrbitControls:OrbitControls0)(camera,?renderer.domElement);

????controls.target.set(0,?0.5,?0);

????controls.update();

????controls.enablePan?=?true;

????controls.enableDamping?=?true;

????const?dracoLoader?=?this.dracoLoader?=?new?DRACOLoader();

????dracoLoader.setDecoderPath('jsm/libs/draco/gltf/');

????const?loader?=?new?GLTFLoader();

????loader.setDRACOLoader(dracoLoader);

????//loader.load('https://statics.jiuqianqu.com/btwc-file/20230222/1677055512471.glb',?function?(gltf)?{

????loader.load('models/gltf/LittlestTokyo.glb',?function?(gltf)?{

??????//console.error("xxxxxxx",gltf)

??????/*??gltf.scene.traverse(function?(child)?{

????????????if?(child.isMesh)?{

????????????????child.frustumCulled?=?false;

????????????????//模型陰影

????????????????child.castShadow?=?true;

????????????????//模型自發光

??????????????child.material.emissive?=?child.material.color;

????????????????child.material.emissiveMap?=?child.material.map;

????????????}

????????})*/

??????const?model?=?gltf.scene;

??????model.position.set(1,?1,?0);

??????model.scale.set(0.01,?0.01,?0.01);

??????scene.add(model);

??????mixer?=?new?THREE.AnimationMixer(model);

??????mixer.clipAction(gltf.animations[0]).play();

??????animate();

????},null,?function?(e)?{

??????console.error(e);

????});


?

????window.onresize?=?function?()?{

??????camera.aspect?=?window.innerWidth?/?window.innerHeight;

??????camera.updateProjectionMatrix();

??????renderer.setSize(window.innerWidth,?window.innerHeight);

????};


?

????function?animate()?{

??????requestId?=?requestAnimationFrame(animate);

??????const?delta?=?clock.getDelta();

??????mixer.update(delta);

??????controls.update();

??????//?//stats.update();

??????renderer.render(scene,?camera);

????}

??}

})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897843.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897843.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897843.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jupyter無法轉換為PDF,HTMLnbconvert failed: Pandoc wasn‘t found.

無法轉為PDF 手動下載工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一樣,還有新的報錯 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意兒 sudo apt-get install texlive-xetex texlive-fon…

關于PLC、電纜線材及氣缸選型的詳細教程

以下是關于PLC、電纜線材及氣缸選型的詳細教程,整合了多個專業來源的核心要點: 一、PLC選型要點 生產廠家選擇 日系PLC(如三菱FX系列、歐姆龍CP1系列)適合獨立設備或簡單控制系統,性價比高。歐美系PLC(如西…

使用 Excel 實現績效看板的自動化

引言 在日常工作中,團隊的績效監控和管理是確保項目順利進行的重要環節。然而,面臨著以下問題: ?數據分散:系統中的數據難以匯總,缺乏一個宏觀的團隊執行情況視圖。?看板缺失:系統本身可能無法提供合適…

02 windows qt配置ffmpeg開發環境搭建

版本說明 首先我使用ffmpeg版本是4.2.1 QT使用版本5.14.2 我選擇是c編譯 在02Day.pro??添加ffmpeg頭?件和庫?件路徑 win32 { INCLUDEPATH $$PWD/ffmpeg-4.2.1-win32-dev/include LIBS $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib \$$PWD/ffmpeg-4.2.1-win32-dev/l…

Dask:Python高效并行計算利器

Dask:Python高效并行計算利器 Dask是一個開源的Python并行計算庫,旨在擴展Python常用工具(如NumPy、Pandas、Scikit-learn等)的功能,使其能夠處理更大規模的數據集和更復雜的計算任務。它通過動態任務調度和分布式計算…

掌握市場先機:9款銷售渠道管理工具深度測評

本文主要介紹了以下9款銷售渠道管理工具:1.紛享銷客; 2.銷幫幫; 3.小滿CRM; 4.有贊; 5.Oracle NetSuite; 6.Salesforce Sales Cloud; 7.Cin7; 8.Pipedrive; 9.BigCommerc…

C語言基礎知識04

指針 指針概念 指針保存地址,地址是字節的編號 指針類型和保存的地址類型要一直 使用時注意,把地址轉換為&變量的格式來看 int a[3]; a轉為&a[0] 指針的大小 64bit 固定8字節, 32bit 固定4字節 指針…

計算矩陣邊緣元素之和(信息學奧賽一本通-1121)

【題目描述】 輸入一個整數矩陣&#xff0c;計算位于矩陣邊緣的元素之和。所謂矩陣邊緣的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 【輸入】 第一行分別為矩陣的行數m和列數n&#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c…

異常(9)

大家好,今天我們來詳細介紹一下異常拋出的知識,在編寫程序時,如果程序中出現錯誤,此時就需要將錯誤的信息告知給調用者,話不多說,來看. 在java中,可以借助throw關鍵字,拋出一個指定的異常對象,將錯誤對象告知給調用者,具體語法如下&#xff1a; throw new xxx("異常產生…

網絡安全就業形勢

網絡安全是一個日益增長的行業&#xff0c;對于打算進入或轉行進入該領域的人來說&#xff0c;制定一個清晰且系統的職業規劃非常重要。2025年&#xff0c;網絡安全領域將繼續發展并面臨新的挑戰&#xff0c;包括不斷變化的技術、法規要求以及日益復雜的威脅環境。 第一部分&am…

3U VPX 國產化板卡FT6678+V7 690T

板卡1、 采用標準3U VPX架構&#xff0c;板上集成1片深圳國微電子SMQ7V690TFFG1761&#xff08;pin-to-pin兼容Xilinx的XC7VX690T-2FFG1761I&#xff09;FPGA&#xff0c;1片國防科大FT-M6678&#xff08;功能兼容TI的TMS320C6678&#xff09;&#xff0c;對外接口RS422、網口…

【數據結構】-哈夫曼樹以及其應用

哈夫曼樹&#xff08;Huffman Tree&#xff09; 1. 哈夫曼樹的定義 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種 帶權路徑長度最短的二叉樹&#xff0c;常用于數據壓縮和最優前綴編碼。其目標是使得 帶權路徑長度&#xff08;WPL&#xff09;最小。 在信息論和計算…

Linux 命名管道

文章目錄 &#x1f680; 深入理解命名管道&#xff08;FIFO&#xff09;及其C實現一、命名管道核心特性1.1 &#x1f9e9; 基本概念 二、&#x1f4bb; 代碼實現解析2.1 &#x1f4c1; 公共頭文件&#xff08;common.hpp&#xff09;2.2 &#x1f5a5;? 服務器端&#xff08;s…

sap 內存管理與數據共享方式

SAP內存管理 內存是程序之間為了傳遞數據而使用的共享存儲空間 SAP內存分類&#xff1a;1、SAP內存&#xff0c;2、ABAP內存 這兩種內存都是針對同一登錄用戶實現數據共享。 SAP內存&#xff08;SAP Memory&#xff09;和ABAP內存&#xff08;ABAP Memory&#xff09;&…

數據結構與算法(哈希表——兩個數組的交集)

原題 349. 兩個數組的交集 - 力扣&#xff08;LeetCode&#xff09; 給定兩個數組 nums1 和 nums2 &#xff0c;返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 […

python筆記2

變量&#xff1a;含義 一個容器&#xff0c;計算機當中的存儲空間。 可以理解為一個用于標識或引用數據的名字或標簽。 作用&#xff1a; 可以通過定義一個變量來給需要使用多次的數據命名&#xff0c;就像一個標簽一樣。下次需要使用這個數據時&#xff0c;只需要通過這個變…

【Linux系統編程】信號

目錄 1、信號1.1、什么是信號1.2、進程對信號的處理1.3、信號的生命周期1.4、信號處理流程1.5、信號的發送 2、kill()、raise()函數 發送信號3、alarm函數 鬧鐘信號4、pause函數 掛起信號、暫停5、singal 函數 捕獲信號5.1、為什么返回值是上一次的處理方式5.2、練習 6、sigact…

實用小工具——快速獲取數據庫時間寫法

最近我遇到了一個比較棘手的問題&#xff1a;在工作中&#xff0c;各個項目所使用的數據庫類型各不相同。這導致我習慣性地使用Oracle的SQL語句進行編寫&#xff0c;但每次完成后都會遇到報錯&#xff0c;最終才意識到項目的數據庫并非Oracle。為了避免這種情況&#xff0c;我需…

數據類型及sizeof,進制轉換

其實數據類型可以講很多內容&#xff0c;這里看情況需要講多久吧。 本篇基本都是理論。 目錄 數據類型的分類 基本數據類型 構造數據類型 指針類型 空類型 計算數據類型或變量所占用的內存字節數 基本語法 進制轉換 二進制 二進制的概念 二進制與十進制的轉換 十六進…

pjsip dtmf發送和接收(pjsua)

DTMF(雙音多頻,Dual-Tone Multi-Frequency)是一種用于電話系統的信號技術,通過組合兩個不同頻率的音頻信號來表示數字和符號。以下是DTMF的主要使用背景和應用場景: 電話撥號 DTMF最常見的用途是電話撥號。當用戶按下電話鍵盤上的數字或符號時,電話會生成兩個特定頻率的音…