Three.js 入門(輔助、位移、父子關系、縮放旋轉、響應式布局)

本篇主要學習內容 :

  1. 三維坐標系輔助坐標系
  2. 物體位移父子元素
  3. 物體的縮放物體的旋轉
  4. 設置響應式畫布全屏控制

點贊 + 關注 + 收藏 = 學會了

本文使用 Three.js 的版本:171 基于 Vue3+vite開發調試


1.三維坐標系輔助坐標系

1.1) 導入three和軌道控制器
// 導入threejs
import * as THREE from 'three'
//導入軌道控制器擴展庫OrbitControls.js
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
1.2)實例化軌道控制器和坐標輔助器
// 坐標輔助器 (xyz軸繪制) 5代表輔助線長度
const axesHelper = new THREE.AxesHelper(5)
//添加到場景
scene.add(axesHelper)
1.3)OrbitControls本質上就是改變相機的參數,比如相機的位置屬性,改變相機位置也可以改變相機拍照場景中模型的角度,實現模型的360度旋轉預覽效果,改變透視投影相機距離模型的距離,就可以改變相機能看到的視野范圍。
// 軌道控制器 兩種方式
const controls = new OrbitControls(camera, document.body)
// 設置相機控件軌道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// 如果OrbitControls改變了相機參數,重新調用渲染器渲染三維場景
controls.addEventListener('change', function () {renderer.render(scene, camera); //執行渲染操作
});//監聽鼠標、鍵盤事件

2.物體位移父子元素

2.1)相機位移動畫基于(.position和.lookAt())屬性,下面完成一段緩動動畫
// 創建相機
const camera = new THREE.PerspectiveCamera(45, //視角window.innerWidth / window.innerHeight, //寬高比0.1, //近平面1000 //遠平面
)
// 渲染函數
;(function animate() {camera.position.x += 0.1//相機直線運動動畫requestAnimationFrame(animate)renderer.render(scene, camera)
})()// 渲染循環 相機圓周運動
let angle = 0; //用于圓周運動計算的角度值
const R = 100; //相機圓周運動的半徑
;(function animate() {angle += 0.01;// 相機y坐標不變,在XOZ平面上做圓周運動camera.position.x = R * Math.cos(angle);camera.position.z = R * Math.sin(angle);renderer.render(scene, camera);requestAnimationFrame(render);
})()
2.2)父子元素
// 創建幾何體
const geometry = new THREE.BoxGeometry(1, 1, 1)// 創建材質
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
// 創建父元素材質
const parMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 })
// 設置材質為線框模式
parMaterial.wireframe = true// 創建網絡
const cube = new THREE.Mesh(geometry, material)
// 創建父元素網絡
let parentCube = new THREE.Mesh(geometry, parMaterial)//添加到父元素上
parentCube.add(cube)
cube.position.set(-3, 0, 0)
parentCube.position.set(3, 0, 0)

3.物體旋轉與縮放

// 設置放大縮小
cube.scale.set(2, 2, 2) //子放大2
parentCube.scale.set(2, 2, 2) // 父放大2  子基于2再放大2// 旋轉
cube.rotation.x = Math.PI / 4 //父旋轉
cube.rotation.x = Math.PI / 4 //子旋轉,疊加父旋轉

4.設置響應式畫布全屏控制

threejs渲染輸出的結果就是一個Cavnas畫布,canvas畫布也是HTML的元素之一,這意味著three.js渲染結果的布局和普通web前端習慣是一樣的。

通過renderer.domElement屬性可以訪問threejs的渲染結果,也就是HTML的元素canvas畫布

4.1)非全屏渲染
const width = 800; //寬度
const height = 500; //高度
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
renderer.setSize(width, height); //設置three.js渲染區域的尺寸(像素px)
renderer.render(scene, camera); //執行渲染操作
document.getElementById('wegbl').appendChild(renderer.domElement);
4.2)全屏渲染
const width = window.innerWidth; //窗口文檔顯示區的寬度作為畫布寬度
const height = window.innerHeight; //窗口文檔顯示區的高度作為畫布高度
const renderer = new THREE.WebGLRenderer();
document.body.appendChild(renderer.domElement);
4.3)響應式畫布
// 監聽窗口變化
window.addEventListener('resize', () => {// 重置渲染器寬高比renderer.setSize(window.innerWidth, window.innerHeight)// 重置相機寬高比camera.aspect = window.innerWidth / window.innerHeight// 更新相機投影矩陣camera.updateProjectionMatrix()
})
4.4) 全屏控制
<template><div><button@click="toggleFullscreen"style="position: absolute; left: 10px; top: 10px; z-index: 999">點擊全屏</button><button@click="outToggleFullscreen"style="position: absolute; left: 80px; top: 10px; z-index: 999">退出全屏</button></div>
</template>
// 按鈕全屏
const toggleFullscreen = () => {// renderer.domElement.requestFullscreen()document.body.requestFullscreen()
}
// 退出全屏
const outToggleFullscreen = () => {document.exitFullscreen()
}

?感謝:b站up主:老陳打碼 以及 threejs中文網 教學及參考文檔
到此基礎入門(二)學習告一段落,道阻且長,行則將至。與諸君共勉。 ??

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

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

相關文章

一鍵導出數據庫表到Excel

工作中&#xff0c;我們經常需要將數據庫表導出到Excel&#xff0c;通常我們會用數據庫編輯器之類的工具提供的導出功能來導出&#xff0c;但是它們的導出功能通常都比較簡單。 這篇文章將介紹一種簡單易用并且功能強大的導出方法。 新增導出 打開的盧導表工具&#xff0c;新…

CSS滾動條原理與自定義樣式指南,CSS滾動條樣式失效,滾動條樣式無效,-webkit-scrollbar無效,overflow不顯示滾動條

滾動內容形成的必要條件 CSS Overflow屬性解析 MDN官方文檔-Overflow屬性 菜鳥教程-Overflow屬性 overflow 屬性控制內容溢出元素框時在對應的元素區間內是否添加滾動條。 值描述visible默認值。內容不會被修剪&#xff0c;會呈現在元素框之外。hidden內容會被修剪&#xf…

【LLM】本地部署LLM大語言模型+可視化交互聊天,附常見本地部署硬件要求(以Ollama+OpenWebUI部署DeepSeekR1為例)

【LLM】本地部署LLM大語言模型可視化交互聊天&#xff0c;附常見本地部署硬件要求&#xff08;以OllamaOpenWebUI部署DeepSeekR1為例&#xff09; 文章目錄 1、本地部署LLM&#xff08;以Ollama為例&#xff09;2、本地LLM交互界面&#xff08;以OpenWebUI為例&#xff09;3、本…

溫濕度監控設備融入智慧物聯網

當醫院的溫濕度監控設備融入智慧物聯網&#xff0c;將會帶來許多新的體驗&#xff0c;可以幫助醫院溫濕度監控設備智能化管理&#xff0c;實現設備之間的互聯互通&#xff0c;方便醫院對溫濕度數據進行統一管理和分析。 添加智慧物聯網技術&#xff0c;實現對醫院溫濕度的實時…

在ubuntu如何安裝samba軟件?

我們在開發過程中&#xff0c;經常修改代碼&#xff0c;可以安裝samba文件來實現&#xff0c;把ubuntu的存儲空間指定為我們win上的一個磁盤&#xff0c;然后我們在或者磁盤里面創建.c文件&#xff0c;進行代碼修改和編寫。samba能將linux的文件目錄直接映射到windows&#xff…

[ComfyUI]官方已支持Skyreels混元圖生視頻,速度更快,效果更好(附工作流)

一、介紹 昨天有提到官方已經支持了Skyreels&#xff0c;皆大歡喜&#xff0c;效果更好一些&#xff0c;還有GGUF量化版本&#xff0c;進一步降低了大家的顯存消耗。 今天就來分享一下官方流怎么搭建&#xff0c;我體驗下來感覺更穩了一些&#xff0c;生成速度也更快&#xf…

B站pwn教程筆記-3

棧知識、部分保護措施 GDB顯示的棧地址有時候并不是可靠的地址&#xff0c;gdb也是用特殊的進程映像來拿地址的。且gdb默認關閉棧地址隨機化。但是&#xff0c;偏移量是沒有錯誤的。目前還沒學到咋解決 第一個棧幀是main函數棧幀&#xff0c;之前的一些系統函數什么的沒有棧幀…

Qt在Linux嵌入式開發過程中復雜界面滑動時卡頓掉幀問題分析及解決方案

Qt在Linux嵌入式設備開發過程中&#xff0c;由于配置較低&#xff0c;加上沒有GPU&#xff0c;我們有時候會遇到有些組件比較多的復雜界面&#xff0c;在滑動時會出現掉幀或卡頓的問題。要講明白這個問題還得從CPU和GPU的分工說起。 一、硬件層面核心問題根源剖析 CPU&#x…

Spring Boot 項目中,JDK 動態代理和 CGLIB 動態代理的使用

在 Spring Boot 項目中&#xff0c;JDK 動態代理和 CGLIB 動態代理都是實現 AOP (面向切面編程) 的重要技術。 它們的主要區別在于代理對象的生成方式和適用范圍。 下面詳細介紹它們的使用場景&#xff1a; 1. JDK 動態代理 (JDK Dynamic Proxy) 原理&#xff1a; JDK 動態代理…

OpenCV計算攝影學(2)圖像去噪函數denoise_TVL1()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 原始-對偶算法是用于解決特定類型變分問題&#xff08;即&#xff0c;尋找一個函數以最小化某個泛函&#xff09;的算法。特別地&#xff0c;圖像…

在 Windows 下的 Docker 中安裝 R語言

以下是在 Windows 系統的 Docker 中安裝 R 語言的詳細教程&#xff0c;包括 Docker 的安裝、配置以及如何在容器中運行 R 語言的步驟。 步驟 1&#xff1a;安裝 Docker 下載 Docker Desktop 訪問 Docker 官方網站&#xff1a;Docker Desktop: The #1 Containerization Tool for…

【數據挖掘在量化交易中的應用:特征發現與特征提取】

好的&#xff0c;我將撰寫一篇關于金融領域數據挖掘的技術博客&#xff0c;重點闡述特征發現和特征提取&#xff0c;特別是在量化交易中的應用。我會提供具體的實操步驟&#xff0c;并結合Python和TensorFlow進行代碼示例。 完成后&#xff0c;我會通知您進行查看。 數據挖掘…

如何在視頻中提取關鍵幀?

在視頻處理中&#xff0c;提取關鍵幀是一項常見的任務。下面將介紹如何基于FFmpeg和Python&#xff0c;結合OpenCV庫來實現從視頻中提取關鍵幀的功能。 實現思路 使用FFmpeg獲取視頻的關鍵幀時間戳&#xff1a;FFmpeg是一個強大的視頻處理工具&#xff0c;可以通過命令行獲取…

九、數據治理架構流程

一、總體結構 《數據治理架構流程圖》&#xff08;Data Governance Architecture Flowchart&#xff09; 水平結構&#xff1a;流程圖采用水平組織&#xff0c;顯示從數據源到數據應用的進程。 垂直結構&#xff1a;每個水平部分進一步劃分為垂直列&#xff0c;代表數據治理的…

Docker 搭建 Gitlab 服務器 (完整詳細版)

參考 Docker 搭建 Gitlab 服務器 (完整詳細版)_docker gitlab-CSDN博客 Docker 安裝 (完整詳細版)_docker安裝-CSDN博客 Docker 日常命令大全(完整詳細版)_docker命令-CSDN博客 1、Gitlab鏡像 # 查找Gitlab鏡像 docker search gitlab # 拉取Gitlab鏡像 docker pull gitlab/g…

Spring MVC 框架學習筆記:從入門到精通的實戰指南

目錄 1. Spring MVC 概述 2. Spring MVC 項目搭建 3. Spring MVC 執行流程 4. Spring MVC RequestMapping 注解 5. Spring MVC 獲取請求參數 6. Spring MVC 常見注解 7. Spring MVC 響應處理 8. Spring MVC SSM 整合 9. Spring MVC 作用域傳參 10. Spring MVC 上傳 1…

RK3568開發筆記-AD7616調試筆記

目錄 前言 一、AD7616介紹 高分辨率 高速采樣速率 寬模擬輸入范圍 集成豐富功能 二、原理圖連接 三、設備樹配置 四、內核驅動配置 五、AD芯片測試 總結 前言 在嵌入式數據采集領域,將模擬信號精準轉換為數字信號至關重要。AD7616 作為一款性能卓越的 16 位模數轉換器…

【對話推薦系統】Towards Topic-Guided Conversational Recommender System 論文閱讀

Towards Topic-Guided Conversational Recommender System 論文閱讀 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…

ASP.NET Core 8.0學習筆記(二十八)——EFCore反向工程

一、什么是反向工程 1.原則&#xff1a;DBFirst 2.反向工程&#xff1a;根據數據庫表來反向生成實體類 3.生成命令&#xff1a;Scaffold-DbContext ‘連接字符串’ 字符串示例&#xff1a; Server.;DatabaseDemo1;Trusted_Connectiontrue; MultipleActiveResultSets true;Tru…

springcloud和dubbo的區別

Spring Cloud和Dubbo作為微服務架構中非常流行的兩個框架&#xff0c;它們在多個方面存在顯著的區別。以下是對兩者區別的詳細分析&#xff1a; 1. 初始定位和生態環境 Spring Cloud&#xff1a;定位為微服務架構下的一站式解決方案&#xff0c;依托于Spring平臺&#xff0c;…