1.2 ThreeJS能力演示——模型導入導出編輯

1、模型導入導出編輯能力

1)支持導入基本類型模型

最常用,最適合作為web演示模型的是glb格式的,當前演示glb模型導入

	// 1) 支持導入基本類型模型const loader = new GLTFLoader();loader.load('./three.js-master/examples/models/gltf/Horse.glb', (gltf) => {// loader.load('./exported_model.gltf', (gltf) => {const model = gltf.scene;scene.add(model);// 2) 支持縮放模型比例model.scale.set(1, 1, 1);// 3) 支持調整模型放置位置,角度姿態model.position.set(0, 0, 0);model.rotation.set(0, 0, 0);}, undefined, (error) => {console.error('模型加載失敗: ', error);});

2)支持縮放模型比例

見上一節scale.set即可完成各軸的模型縮放比例

3)支持調整模型放置位置,角度姿態

見第一節的position屬性可以設置位置

rotation屬性可以設置角度

4)將模型整體導出

通過此方案可以將模型通過瀏覽器下載的方式下載下來。

	// 4) 將模型整體導出const exporter = new GLTFExporter();function exportModel() {exporter.parse(scene, (result) => {const blob = new Blob([JSON.stringify(result)], { type: 'application/json' });const link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = 'exported_model.gltf';link.click();});}

2、整體演示代碼

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Three.js 模型導入導出示例</title><style>body { margin: 0; overflow: hidden; }#camera-info {position: absolute;top: 10px;left: 10px;background-color: rgba(0, 0, 0, 0.5);color: white;padding: 10px;font-family: Arial, sans-serif;}</style>
</head>
<body>
<div id="camera-info"></div>
<script type="importmap">{"imports": {"three": "./three.js-master/build/three.module.js","three/addons/": "./three.js-master/examples/jsm/"}}
</script>
<script type="module">import * as THREE from "three"import { OrbitControls } from 'three/addons/controls/OrbitControls.js';import { GLTFLoader } from "three/addons/loaders/GLTFloader.js"import {GLTFExporter} from "three/addons/exporters/GLTFExporter.js";// 1) 創建畫布const scene = new THREE.Scene();scene.background = new THREE.Color( 0xa0a0a0 );const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);// 2) 設置 camera 位置,朝向角度const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.set(0, 0, 1000); // 設置相機位置camera.lookAt(scene.position); // 讓相機朝向場景中心// 設置控制軌道const controls = new OrbitControls( camera, renderer.domElement );controls.target.set( 0, 0.1, 0 );controls.update();controls.minDistance = 0.5;controls.maxDistance = 1000;controls.maxPolarAngle = 0.5 * Math.PI;// 5) 支持動態顯示攝像頭位置、角度、縮放信息const cameraInfo = document.getElementById('camera-info');function updateCameraInfo() {cameraInfo.innerHTML = `攝像頭信息:<br>位置: (${camera.position.x.toFixed(2)}, ${camera.position.y.toFixed(2)}, ${camera.position.z.toFixed(2)})<br>角度: (${camera.rotation.x.toFixed(2)}, ${camera.rotation.y.toFixed(2)}, ${camera.rotation.z.toFixed(2)})<br>縮放: ${camera.zoom.toFixed(2)}`;}updateCameraInfo();// 1) 支持導入基本類型模型const loader = new GLTFLoader();loader.load('./three.js-master/examples/models/gltf/Horse.glb', (gltf) => {// loader.load('./exported_model.gltf', (gltf) => {const model = gltf.scene;scene.add(model);// 2) 支持縮放模型比例model.scale.set(1, 1, 1);// 3) 支持調整模型放置位置,角度姿態model.position.set(0, 0, 0);model.rotation.set(0, 0, 0);}, undefined, (error) => {console.error('模型加載失敗: ', error);});// 渲染循環function animate() {requestAnimationFrame(animate);updateCameraInfo();renderer.render(scene, camera);}animate();// 4) 將模型整體導出const exporter = new GLTFExporter();function exportModel() {exporter.parse(scene, (result) => {const blob = new Blob([JSON.stringify(result)], { type: 'application/json' });const link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = 'exported_model.gltf';link.click();});}function handleKeyDown(event) {switch (event.key) {case 'e':exportModel(); // 按下 'e' 鍵導出模型break;}}document.addEventListener('keydown', handleKeyDown);
</script>
</body>
</html>

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

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

相關文章

文檔智能:OCR+Rocketqa+layoutxlm <Rocketqa>

此次梳理Rocketqa&#xff0c;個人認為該篇文件講述的是段落搜索的改進點&#xff0c;關于其框架&#xff1a;粗檢索 重排序----&#xff08;dual-encoder architecture&#xff09;&#xff0c;講訴不多&#xff0c;那是另外的文章&#xff1b; 之前根據文檔智能功能&#x…

ESP8266 AP模式 網頁配網 arduino ide

ESP8266的AP配網,可以自行配置網絡,一個簡單的demo,文檔最后有所有的代碼,已經測試通過. 查看SPIFFS文件管理系統中的文件 賬號密碼是否存在,如不存在進入AP配網,如存在進入wifi連接模式 // 檢查Wi-Fi憑據if (isWiFiConfigured()) {Serial.println("找到Wi-Fi憑據&#…

ubuntu官方軟件包網站 字體設置

在https://ubuntu.pkgs.org/22.04/ubuntu-universe-amd64/xl2tpd_1.3.16-1_amd64.deb.html搜索找到需要的軟件后&#xff0c;點擊&#xff0c;下滑&#xff0c; 即可在Links和Download找到相關鏈接&#xff0c;下載即可&#xff0c; 但是找不到ros的安裝包&#xff0c; 字體設…

使用 WPF 和 C# 繪制覆蓋網格的 3D 表面

此示例展示了如何使用 C# 代碼和 XAML 繪制覆蓋有網格的 3D 表面。示例使用 WPF 和 C# 將紋理應用于三角形展示了如何將紋理應用于三角形。此示例只是使用該技術將包含大網格的位圖應用于表面。 在類級別&#xff0c;程序使用以下代碼來定義將點的 X 和 Z 坐標映射到 0.0 - 1.…

[Do374]Ansible一鍵搭建sftp實現用戶批量增刪

[Do374]Ansible一鍵搭建sftp實現用戶批量增刪 1. 前言2. 思路3. sftp搭建及用戶批量新增3.1 配置文件內容3.2 執行測試3.3 登錄測試3.4 確認sftp服務器配置文件 4. 測試刪除用戶 1. 前言 最近準備搞一下RHCA LV V,外加2.9之后的ansible有較大變化于是練習下Do374的課程內容. 工…

SK海力士(SK Hynix)是全球領先的半導體制造商之一,其在無錫的工廠主要生產DRAM和NAND閃存等存儲器產品。

SK海力士&#xff08;SK Hynix&#xff09;是全球領先的半導體制造商之一&#xff0c;其在無錫的工廠主要生產DRAM和NAND閃存等存儲器產品。以下是SK海力士的一些主要產品型號和類別&#xff1a; DRAM 產品 DDR4 DRAM 特點: 高速、低功耗&#xff0c;廣泛應用于PC、服務器和移…

WordPress如何配置AJAX以支持點擊加載更多?

WordPress 配置 AJAX 支持點擊加載更多內容通常涉及到前端 JavaScript 和服務器端的配合。以下是基本步驟&#xff1a; 安裝插件&#xff1a;你可以選擇一個現成的插件如 “Advanced Custom Fields” 或者 “WP Infinite Scroll”&#xff0c;它們已經內置了 AJAX 功能&#xf…

【IDEA 2024】學習筆記--文件選項卡

在我們項目的開發過程中&#xff0c;由于項目涉及的類過多&#xff0c;以至于我們會打開很多的窗口。使用IDEA默認的配置&#xff0c;個人覺得十分不便。 目錄 一、設置多個文件選項卡按照文件字母順序排列 二、設置多個文件選項卡分行顯示 一、設置多個文件選項卡按照文件字…

【C】數組和指針的關系

在 C 語言 和 C 中&#xff0c;數組和指針 有非常密切的關系。它們在某些情況下表現類似&#xff0c;但也有重要的區別。理解數組和指針的關系對于掌握低級內存操作和優化程序性能至關重要。 1. 數組和指針的基本關系 數組是一個 連續存儲的元素集合&#xff0c;在內存中占據一…

Maven 配置本地倉庫

步驟 1&#xff1a;修改 Maven 的 settings.xml 文件 找到你的 Maven 配置文件 settings.xml。 Windows: C:\Users\<你的用戶名>\.m2\settings.xmlLinux/macOS: ~/.m2/settings.xml 打開 settings.xml 文件&#xff0c;找到 <localRepository> 標簽。如果沒有該標…

Docker save load 鏡像 tag 為 <none>

一、場景分析 我從 docker hub 上拉了這么一個鏡像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它導出成 tar 文件以便拷貝到內網機器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 鏡像ID 當我把這個鏡像傳到別的機器&#xff0c;并用 dock…

O2O同城系統架構與功能分析

2015工作至今&#xff0c;10年資深全棧工程師&#xff0c;CTO&#xff0c;擅長帶團隊、攻克各種技術難題、研發各類軟件產品&#xff0c;我的代碼態度&#xff1a;代碼虐我千百遍&#xff0c;我待代碼如初戀&#xff0c;我的工作態度&#xff1a;極致&#xff0c;責任&#xff…

《盤古大模型——鴻蒙NEXT的智慧引擎》

在當今科技飛速發展的時代&#xff0c;華為HarmonyOS NEXT的發布無疑是操作系統領域的一顆重磅炸彈&#xff0c;其將人工智能與操作系統深度融合&#xff0c;開啟了智能新時代。而盤古大模型在其中發揮著至關重要的核心作用。 賦予小藝智能助手超強能力 在鴻蒙NEXT中&#xf…

走出實驗室的人形機器人,將復刻ChatGPT之路?

1月7日&#xff0c;在2025年CES電子展現場&#xff0c;黃仁勛不僅展示了他全新的皮衣和采用Blackwell架構的RTX 50系列顯卡&#xff0c;更進一步展現了他對于機器人技術領域&#xff0c;特別是人形機器人和通用機器人技術的篤信。黃仁勛認為機器人即將迎來ChatGPT般的突破&…

EF Core執行原生SQL語句

目錄 EFCore執行非查詢原生SQL語句 為什么要寫原生SQL語句 執行非查詢SQL語句 有SQL注入漏洞 ExecuteSqlInterpolatedAsync 其他方法 執行實體相關查詢原生SQL語句 FromSqlInterpolated 局限性 執行任意原生SQL查詢語句 什么時候用ADO.NET 執行任意SQL Dapper 總…

Java中網絡編程的學習

目錄 網絡編程概述 網絡模型 網絡通信三要素: IP 端口號 通信協議 IP地址&#xff08;Internet Protocol Address&#xff09; 端口號 網絡通信協議 TCP 三次握手 四次揮手 UDP TCP編程 客戶端Socket的工作過程包含以下四個基本的步驟&#xff1a; 服務器程序…

HarmonyOS NEXT開發進階(七):頁面跳轉

文章目錄 一、前言二、頁面跳轉三、頁面返回四、頁面返回前增加確認對話框4.1 系統的默認詢問框4.2 自定義詢問框 五、拓展閱讀 一、前言 APP開發過程中&#xff0c;多頁面跳轉場景十分常見&#xff0c;例如&#xff0c;登錄 -> 首頁 -> 個人中心。在鴻蒙開發中&#xf…

【Python】第一彈---解鎖編程新世界:深入理解計算機基礎與Python入門指南

?個人主頁&#xff1a; 熬夜學編程的小林 &#x1f497;系列專欄&#xff1a; 【C語言詳解】 【數據結構詳解】【C詳解】【Linux系統編程】【MySQL】【Python】 目錄 1、計算機基礎概念 1.1、什么是計算機 1.2、什么是編程 1.3、編程語言有哪些 2、Python 背景知識 2.…

LeetCode:131. 分割回文串

跟著carl學算法&#xff0c;本系列博客僅做個人記錄&#xff0c;建議大家都去看carl本人的博客&#xff0c;寫的真的很好的&#xff01; 代碼隨想錄 LeetCode:131. 分割回文串 給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是回文串。返回 s 所…