threeJS——安裝以及三要素

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、安裝
  • 二、三要素
    • 1.場景
      • 1.1創建場景
      • 1.2向場景添加元素
      • 1.3場景屬性
    • 2.相機
      • 2.1相機特點
      • 2.2正交相機
      • 2.3空間布局
      • 2.4小姐操作
    • 3.渲染器
  • 總結


前言

本章簡單介紹前端框架threeJS的使用,使用threeJS我們可以構建出前端的3D界面。不僅能應用在看房、模型分享網站等有需求的項目中,還可以在其他項目中做出酷炫的效果。


一、安裝

為了方便查看效果,我們用vite快速創建一個項目,然后使用npm工具進行安裝,命令如下:

npm install --save three

安裝完成后,我們編寫一個html文件測試

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script type="module">import * as THREE from "three";//   創建場景const scene = new THREE.Scene();// 加載圖片作為背景// const loader = new THREE.TextureLoader();// loader.load("./image/1.png", (texture) => {//   scene.background = texture;// });//   創建透視相機const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);// 修改相機位置camera.position.set(0, 0, 5);// 旋轉相機camera.lookAt(0, 0, 0);// 物體網格const geometry = new THREE.BoxGeometry(1, 1, 1);// 物體材質const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);// 添加到場景scene.add(cube);// 創建網格輔助線const gridHelper = new THREE.GridHelper(10, 10);scene.add(gridHelper);//   創建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);// 將渲染出的元素追加到頁面document.body.appendChild(renderer.domElement);function animation() {requestAnimationFrame(animation);cube.rotation.x += 0.01;cube.rotation.y += 0.01;// 渲染場景和相機renderer.render(scene, camera);}animation();</script></body>
</html>

運行后,對應頁面上會出現一個不停旋轉的立方體
在這里插入圖片描述
然后說明threeJS可以使用了

二、三要素

treeJS中有三個重要元素

  • 場景
  • 相機
  • 渲染器

1.場景

場景元素(scene)中存儲著我們所有的對象(模型、燈光、攝像機),是一個容器

1.1創建場景

從導入three包中提供的函數,可以創建一個場景對象

import * as THREE from 'three';const scene = new THREE.Scene();

1.2向場景添加元素

有了場景后,我們就可以向里面添加需要的元素,這個元素可以是模型、燈光等,threeJS中提供了多種默認的模型,也可以自己讀取建模軟件中的模型進行導入,我們試著導入一個默認的立方體:

const geometry = new THREE.BoxGeometry( 1, 1, 1 );// 物體材質
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );

對于模型而言,創建出的物體還需要為其指定材質才能夠正常顯示。
最后使用BoxGeometry()創建模型頂點數據,用MeshBasicMaterial()創建模型材質,兩者結合變成完整的立方體模型,然后添加到場景scene中

1.3場景屬性

場景除了可以存儲各種元素以外,場景對象本身也有很多屬性,比如我們可以使用background屬性設置場景背景
在這里插入圖片描述

2.相機

threejs中提供了多種類型的相機:正交相機(距離不影響物體大小)、透視相機(物體近大遠小)、立方相機(用于全景圖)、立體相機。
這里主要使用的是透視相機,因為符合人眼的規律。

2.1相機特點

在開始介紹該對象的屬性前,先說一下3D建模中透視相機的特點:
在這里插入圖片描述
相機的視野區域是一個立方體(錐體),離我們人眼原的一段是遠端,離我們人眼近的一端是近端,處于這個立方體內的物體會被投射到近端,形成畫面。

2.2正交相機

我們說過,相機有很多種類型,上面視野范圍呈錐體的是透視相機,而正交相機的視角范圍是一個立方體,正交相機投射的物體會保留原來的大小(不會近大遠小)。
這種相機常被用于一些需要精準測量的模型中,不會因為縮放干擾到數據。
在這里插入圖片描述

2.3空間布局

場景中用三維坐標來描述位置,threejs中的布局如下(用blender模擬一下):
在這里插入圖片描述
如果是剛創建出的元素(包括相機)都是生成在場景原點的位置,如果我們想要成功渲染出模型,需要先調整模型和相機的位置,讓模型處于相機的可視范圍內。

2.4小姐操作

相機可以進行位置的移動和視角的旋轉,這些可以幫助我們在頁面渲染出一些想要的效果。

// 修改相機位置camera.position.set(0, 0, 10);// 視角中心位置(看向哪)camera.lookAt(5, 0, 0);

3.渲染器

設置好場景和相機后需要使用渲染器才可以真正渲染到頁面上。
本質是在canvas標簽上來展示效果。
渲染器我們這里介紹WebGLRenderer
調用構造器可以創建對應對象,其中可以設置canvas屬性來指定一個已有的canvas標簽,在里面渲染效果。

// 創建渲染器const renderer = new THREE.WebGLRenderer({canvas: document.querySelector('.canvas1')});

如果不設置,或者沒有現成的canvas元素,就需要用追加節點的方式動態的追加一個新的canvas元素。

document.body.appendChild(renderer.domElement)

這里renderer.domElement指向的是用來渲染的canvas對象,如果在構造方法中指定過,就是我們指定的那一個。如果是沒有指定過,就會自動生成一個canvas,這個時候再用來作為追加節點就可以了。


總結

由此我們已經能夠簡單使用threeJS創建簡單模型,不過想要做出酷炫效果,需要導入外部模型,這個后面再說。

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

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

相關文章

畢業項目推薦:基于yolov8/yolo11的野生菌菇檢測識別系統(python+卷積神經網絡)

文章目錄 概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式&#xff09;功能6 支持切換檢測到的目標查看 二、數據集三、算法介紹1. YO…

【精華】為什么class在前端開發中不常用?

為什么class在前端開發中不常用&#xff1f; js是一種基于原型的語言。它的對象繼承是通過 原型鏈&#xff08;prototype chain&#xff09;實現的&#xff0c;每個對象都有一個 proto 屬性指向它的原型。&#xff08;大多數傳統面向對象語言&#xff08;如 Java、C、Python、…

【六祎 - Note】SQL備忘錄;DDL,DML,DQL,DCL

SQL備忘錄 from to : 點擊訪問源地址

阿里云物聯網獲取設備屬性api接口:QueryDevicePropertyData

阿里云物聯網接口&#xff1a;QueryDevicePropertyData 說明&#xff1a;調用該接口查詢指定設備或數字孿生節點&#xff0c;在指定時間段內&#xff0c;單個屬性的數據 比如提取上傳到物聯網的溫度數據 api文檔&#xff1a;QueryDevicePropertyData_物聯網平臺_API文檔-阿里…

需求和開發模型

文章目錄 什么是需求&#xff1f;用戶需求軟件需求用戶需求和軟件需求的不同 開發模型什么是“模型”&#xff1f;軟件的生命周期常見的開發模型瀑布模型&#xff08;Waterfall Model&#xff09;螺旋模型增量模型、迭代模型敏捷模型 測試模型V 模型W 模型&#xff08;雙 V 模型…

21-發糖果

n 個孩子站成一排。給你一個整數數組 ratings 表示每個孩子的評分。 你需要按照以下要求&#xff0c;給這些孩子分發糖果&#xff1a; 每個孩子至少分配到 1 個糖果。 相鄰兩個孩子評分更高的孩子會獲得更多的糖果。 請你給每個孩子分發糖果&#xff0c;計算并返回需要準備的 最…

sql深入學習

文章目錄 前言知識學習注釋的兩種形式字符型注入萬能密碼 布爾盲注報錯注入堆疊注入時間盲注二次注入 小技巧 前言 這次學習建立在對數據庫有基本的認識&#xff0c;了解基礎的增刪改查語句&#xff0c;數字型注入和字符型注入的基礎上&#xff0c;進一步深入學習知識&#xf…

利用three.js在Vue項目中展示重構的stl模型文件

一、目的 為了在前端頁面展示3d打印機打印過程 二、前期準備 完整模型的stl文件和模型切割成的n個stl文件 models文件夾下的文件就是切割后的stl文件 三、代碼 <template><div ref"threeContainer" class"three-container"></div><…

【Eureka 緩存機制】

今天簡單介紹一下Eureka server 的緩存機制吧?????? 一、先來個小劇場&#xff1a;服務發現的"拖延癥" 想象你是個外賣小哥&#xff08;客戶端&#xff09;&#xff0c;每次接單都要打電話問調度中心&#xff08;Eureka Server&#xff09;&#xff1a;“現在…

Python--內置模塊和開發規范(下)

2. 開發規范 2.1 單文件應用 文件結構示例 # 文件注釋 import os import jsonDB_PATH "data.json" # 常量放頂部def load_data():"""函數注釋&#xff1a;加載數據"""if os.path.exists(DB_PATH):with open(DB_PATH, "r"…

go設計模式

劉&#xff1a;https://www.bilibili.com/video/BV1kG411g7h4 https://www.bilibili.com/video/BV1jyreYKE8z 1. 單例模式 2. 簡單工廠模式 代碼邏輯&#xff1a; 原始&#xff1a;業務邏輯層 —> 基礎類模塊工廠&#xff1a;業務邏輯層 —> 工廠模塊 —> 基礎類模塊…

搭建數字化生態平臺公司:痛點與蚓鏈解決方案

在數字技術突飛猛進的當下&#xff0c;數字化生態平臺成為眾多企業實現創新發展、拓展業務版圖的 “秘密工具”。今天&#xff0c;咱們就一起來聊聊搭建這類平臺的公司&#xff0c;看看它們有啥獨特之處&#xff0c;又面臨哪些難題。 一、面臨的痛點 &#xff08;一&#xff0…

標記符號“<”和“>”符號被稱為“尖括號”或“角括號”

你提到的“<”和“>”符號被稱為“尖括號”或“角括號”。它們常用于編程語言中表示類型參數&#xff08;如泛型&#xff09;、HTML標簽&#xff08;如<div>&#xff09;、數學中的不等式&#xff08;如< 5&#xff09;等。 好的&#xff0c;我來用通俗的方式解…

云平臺DeepSeek滿血版:引領AI推理革新,開啟智慧新時代

引言&#xff1a;人工智能的未來——云平臺的卓越突破 在當今科技飛速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;技術正深刻地改變著我們生活與工作方式的方方面面。作為AI領域的創新者與領航者&#xff0c;云平臺始終走在技術前沿&#xff0c;憑借無窮的熱情…

自然語言處理:文本規范化

介紹 大家好&#xff01;很高興又能在這兒和大家分享自然語言處理相關的知識了。在上一篇發布于自然語言處理&#xff1a;初識自然語言處理-CSDN博客為大家初步介紹了自然語言處理的基本概念。而這次&#xff0c;我將進一步深入這個領域&#xff0c;和大家聊聊自然語言處理中一…

HTTP非流式請求 vs HTTP流式請求

文章目錄 HTTP 非流式請求 vs 流式請求一、核心區別 服務端代碼示例&#xff08;Node.js/Express&#xff09;非流式請求處理流式請求處理 客戶端請求示例非流式請求&#xff08;瀏覽器fetch&#xff09;流式請求處理&#xff08;瀏覽器fetch&#xff09; Python客戶端示例&…

C語言機試編程題

編寫版本&#xff1a;vc2022 1.求最大/小值 #include<stdio.h> int main(){int a[50],n;int max, min;printf("請輸入您要輸入幾個數");scanf_s("%d", &n);printf("請輸入您要比較的%d個數\n",n);for (int i 0; i<n; i) {scanf_…

c++ 多個.cpp文件運行

目錄 方法 1&#xff1a;將其他文件中的 main 改為普通函數 方法 2&#xff1a;使用頭文件組織代碼 方法 3&#xff1a;條件編譯&#xff08;僅用于調試或特殊需求&#xff09; 方法 4&#xff1a;創建類或命名空間管理邏輯 在一個C項目中&#xff0c;多個.cpp文件不能同…

基于OFDR的層壓陸相頁巖油儲層中非對稱裂縫群傳播的分布式光纖監測

關鍵詞&#xff1a;OFDR、分布式光纖傳感、裂縫傳播 一. 概述 四川盆地涼高山組優質頁巖油儲層存在復雜的垂直重疊巖性&#xff0c;大陸頁巖油儲層存在發育層理&#xff0c;薄層和天然裂縫&#xff0c;對水平井多級壓裂技術的裂縫網絡形態控制和監測構成挑戰。本研究提出了一…

UniApp 按鈕組件 open-type 屬性詳解:功能、場景與平臺差異

文章目錄 引言一、open-type 基礎概念1.1 核心作用1.2 通用使用模板 二、主流 open-type 值詳解2.1 contact - 客服會話功能說明平臺支持代碼示例 2.2 share - 內容轉發功能說明平臺支持注意事項 2.3 getUserInfo - 獲取用戶信息功能說明平臺支持代碼示例 2.4 getPhoneNumber -…