Three.js初學(2)

Three.js初學(2)

  • 三維坐標系的認識
    • 1. 輔助坐標系
  • 光源的影響
    • 1. 光材質的影響
    • 2. 光源介紹
      • 點光源
      • 環境光
      • 平行光
    • 3. 光源衰減/位置
  • 相機控件
    • 1. 引入擴展庫
    • 2. 使用方法

三維坐標系的認識

這一章節的主要作用是加強自我對三維坐標空間的認識。

1. 輔助坐標系

AxesHelper()的參數是輔助坐標系的線段的尺寸大小(設置時盡量比自己的三維場景幾何體要大~)。坐標軸顏色紅R、綠G、藍B分別對應坐標系的x、y、z軸,對于three.js的3D坐標系默認y軸朝上。

// AxesHelper:輔助觀察的坐標系
const axesHelper = new THREE.AxesHelper(150);
scene.add(axesHelper);

如果模型顏色太深看不起坐標軸,可以將材質設置為半透明顏色,這樣可以清楚觀察到輔助坐標系。

const material = new THREE.MeshBasicMaterial({color: 0xff0000, //設置材質顏色transparent:true,//開啟透明opacity:0.3,//設置透明度
});

效果如下圖所示:
在這里插入圖片描述
其余具體代碼由此可看:—> 上一篇博客詳情

如果想要更進一步了解三維坐標系位置關系,可以試著更改Mesh模型對象在場景的尺寸大小以及渲染位置。也可以更改相機的位置坐標以及相機的LookAt()的方向。

光源的影響

在實際生活中物體表面的明暗效果是會受到光照強度的影響,比如晚上不開燈,你就很有可能看不到或者看不清物體,燈光越暗,視線越模糊。咱們用網格模型Mesh模擬生活中物體,用Light模擬光照對物體表面的影響。

1. 光材質的影響

three.js提供的眾多網格模型中,是有一些不受光照影響的。如下圖所示:
在這里插入圖片描述
漫反射網格材質MeshLambertMaterial會受到光照影響,不同面和光線夾角不同,立方體不同面就會呈現出來不同的明暗效果。

MeshPhongMaterial可以實現MeshLambertMaterial不能實現的高光反射效果。對于高光效果,你可以想象一下,你在太陽下面觀察一輛車,你會發現在特定角度和位置,你可以看到車表面某個局部區域非常高亮.它就類似與一個鏡面反射效果,比如你生活中拿一面鏡子,放在太陽光下,調整角度,可以把太陽光反射到其它地方,如果反射光對著眼睛,也就是反射光線和視線平行的時候,會非常刺眼。
屬性值:

  • 高光亮度屬性.shininess
// 模擬鏡面反射,產生一個高光效果
const material = new THREE.MeshPhongMaterial({color: 0xff0000,shininess: 20, //高光部分的亮度,默認30
});
  • 高光顏色屬性.specular
// 模擬鏡面反射,產生一個高光效果
const material = new THREE.MeshPhongMaterial({color: 0xff0000,shininess: 20, //高光部分的亮度,默認30specular: 0x444444, //高光部分的顏色
});

2. 光源介紹

光源種類名稱
環境光AmbientLight
點光源PointLight
聚光燈光源SpotLight
平行光DirectionLight

在這里插入圖片描述

點光源

兩個參數分別表示光源顏色和光照強度

  • 參數1:0xffffff是純白光,表示光源顏色
  • 參數2:1.0,表示光照強度,可以根據需要調整,你可以可以直接訪問光照強度屬性.intensity設置
const pointLight = new THREE.PointLight(0xffffff, 1.0);
pointLight.intensity = 2.0;//光照強度

通過點光源輔助觀察對象PointLightHelper可視化點光源,可以借助相機控件OrbitControls旋轉縮放三維場景便于預覽點光源位置。

// 光源輔助觀察
const pointLightHelper = new THREE.PointLightHelper(pointLight, 10);
scene.add(pointLightHelper);

可以試著更改原來光源的位置,觀察光源變化情況。
在這里插入圖片描述

環境光

環境光沒有特定方向,只是整體改變場景的光照明暗。

//環境光:沒有特定方向,整體改變場景的光照明暗
const ambient = new THREE.AmbientLight(0xffffff, 0.4);
scene.add(ambient);

在這里插入圖片描述

平行光

平行光就是沿著特定方向發射。

// 平行光
const directionalLight = new THREE.DirectionalLight(0xffffff, 1.0);
// 設置光源的方向:通過光源position屬性和目標指向對象的position屬性計算
directionalLight.position.set(80, 100, 50);
// 方向光指向對象網格模型mesh,可以不設置,默認的位置是0,0,0
directionalLight.target = mesh;
scene.add(directionalLight);

通過點光源輔助觀察對象DirectionalLightHelper可視化點光源

const dirLightHelper = new THREE.DirectionalLightHelper(directionalLight, 5, 0xff0000);
scene.add(dirLightHelper);

在這里插入圖片描述

3. 光源衰減/位置

實際生活中點光源,比如比如一個燈泡,隨機距離的改變,光線會衰減,越來越弱,光源衰減屬性.decay默認值是2.0,如果你不希望衰減可以設置為0.0。

光源其實就是一個燈泡,你放的位置不同,渲染的效果就不一樣,需要注意的是光源位置尺寸大小

最后將光源添加到3D場景中即可

pointLight.decay = 0.0;//設置光源不隨距離衰減
//點光源位置
pointLight.position.set(400, 0, 0);//點光源放在x軸上
scene.add(pointLight); //點光源添加到場景中

光源在x軸的效果如下圖所示:
在這里插入圖片描述

相機控件

平時開發調試代碼,或者展示模型的時候,可以通過相機控件OrbitControls實現旋轉縮放預覽效果。

本質上就是改變相機的參數,比如相機的位置屬性,改變相機位置也可以改變相機拍照場景中模型的角度,實現模型的360度旋轉預覽效果,改變透視投影相機距離模型的距離,就可以改變相機能看到的視野范圍。

1. 引入擴展庫

  • 項目開發中引入方式:
// 引入軌道控制器擴展庫OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
  • 如果在原生的HTML文件中:
<script type="importmap">{"imports": {"three": "../three.js/build/three.module.js","three/addons/": "../three.js/examples/jsm/"}}
</script><script type="module">
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
</script>

2. 使用方法

// 設置相機控件軌道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// 如果OrbitControls改變了相機參數,重新調用渲染器渲染三維場景
controls.addEventListener('change', function () {renderer.render(scene, camera); //執行渲染操作
});//監聽鼠標、鍵盤事件
  • 旋轉:拖動鼠標左鍵
  • 縮放:滾動鼠標中鍵
  • 平移:拖動鼠標右鍵

在這里插入圖片描述

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

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

相關文章

貓頭虎分享已解決Bug || TypeError: Cannot set property ‘innerHTML‘ of null

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

華為配置直連三層組網隧道轉發示例

配置直連三層組網隧道轉發示例 組網圖形 圖1 配置直連三層組網隧道轉發示例組網圖 業務需求組網需求數據規劃配置思路配置注意事項操作步驟配置文件擴展閱讀 業務需求 企業用戶接入WLAN網絡&#xff0c;以滿足移動辦公的最基本需求。且在覆蓋區域內移動發生漫游時&#xff0c;不…

Linux 系統編程:文件編程

本篇涉及文件的創建、打開、讀和關閉。 文件為操作系統服務和設備提供了一個簡單而一致的 接口 。“接口”指的是一種約定或標準&#xff0c;通過提供一個一致的接口&#xff0c;可以為上層隱藏底層硬件和服務的復雜性&#xff0c;上層無需關注它們的具體實現細節。 比如操作系…

Kafka進階

文章目錄 概要應用場景消息隊列兩種模式kafka的基礎架構分區常見問題小結 概要 kafka的傳統定義&#xff1a;kafka是一個分布式的基于發布\訂閱模式的消息隊列&#xff0c;主要用于大數據實時處理領域。 kafka的最新概念&#xff1a;kafka是一個開源的分布式事件流平臺&#x…

隨機森林模型、模型模擬技術和決策樹模型簡介

隨機森林模型、模型模擬技術和決策樹模型簡介 隨機森林模型 隨機森林模型是一種比較新的機器學習模型&#xff0c;它是通過集成學習的方法將多個決策樹模型組合起來&#xff0c;形成一個更加強大和穩定的模型。隨機森林模型的基本原理是“數據隨機”和“特征隨機”&#xff0…

10種常見的光伏發電量計算方法

光伏發電是一種將太陽能轉化為電能的清潔能源技術。隨著環境保護意識的日益增強和能源結構的轉型&#xff0c;光伏發電得到了廣泛的應用。對于光伏系統來說&#xff0c;發電量的準確計算是評估系統性能、預測長期收益和優化系統運行的關鍵。以下是常見的光伏發電量計算方法&…

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

Python3零基礎教程之Python解釋器與開發環境搭建

大家好&#xff0c;我是千與編程&#xff0c;碩士畢業于北京大學&#xff0c;曾先后就職于字節跳動&#xff0c;京東等互聯網大廠&#xff0c;目前在編程導航知識星球擔任星球嘉賓&#xff0c;著有《AI算法畢設智囊袋》&#xff0c;《保姆級帶你通關秋招教程》兩大專欄。 今天開…

從it方面介紹部分好玩的電影

電影推薦 1.《黑客帝國》《The matrix》 僅推薦第一二三部2. 《代碼奔騰》《code rush》3 人物傳記類 《社交網絡》 《硅谷傳奇》 《喬布斯》4《模仿游戲》也是傳記 但主演是 卷福5 《環形使者》6 《蝴蝶效應》 三部7.《隱私大盜》8.《監視資本主義&#xff1a;智能陷阱》9. 劇…

RMAN備份與恢復

文章目錄 一、RMAN介紹二、全量備份三、增量備份0級備份1級增量備份累積性差量備份總結 四、壓縮備份壓縮備份介紹壓縮備份操作壓縮備份優缺點 五、異常恢復1、恢復前的準備2、恢復數據庫 六、RMAN相關參數 一、RMAN介紹 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

在做了frp的實驗室服務器不同端口間傳輸文件

背景 實驗室有兩臺服務器&#xff0c;使用的是一個IP&#xff0c;兩個端口&#xff0c;給人看上去是一臺服務器的兩個端口&#xff0c;實際是兩臺服務器。 現在我需要從一個端口傳輸一個文件夾到另外一個端口&#xff0c;實際上是從一個機器傳輸到另外一個機器。 操作 在兩臺…

linux系統消息中間件rabbitmq部署鏡像集群

RabbitMQ鏡像集群配置 RabbitMQ鏡像集群配置創建鏡像集群:鏡像隊列策略設置說明 RabbitMQ鏡像集群配置 上面已經完成RabbitMQ默認集群模式&#xff0c;但并不保證隊列的高可用性&#xff0c;盡管交換機、綁定這些可以復制到集群里的任何一個節點&#xff0c;但是隊列內容不會復…

thonny 使用命令行安裝包并且替換源,安裝速度嗖嗖的

thonny 使用命令行安裝包并且替換源 點擊 “工具”->"打開系統shell"替換源下載嘎嘎快 點擊 “工具”->“打開系統shell” 替換源 pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliy…

AI Agent幾篇不錯的概述和介紹

?2023年人工智能體(AI Agent)開發與應用全面調研&#xff1a;概念、原理、開發、應用、挑戰、展望 OpenAI的CEO都在談的 AI Agent&#xff0c;到底是什么&#xff1f; | 人人都是產品經理 AI智能體卷爆大模型&#xff01;4大Agent打擂&#xff0c;西部世界誰將成為軟件2.0&am…

快速學習安全框架 Springsecurity最新版(6.2)--用戶授權模塊

簡介 上一節Springsecurity 用戶認證 Springsecurity 擁有強大的認證和授權功能并且非常靈活&#xff0c;,一來說我們都i有以下需求 可以幫助應用程序實現以下兩種常見的授權需求&#xff1a; 用戶-權限-資源&#xff1a;例如張三的權限是添加用戶、查看用戶列表&#xff0c;李…

康威生命游戲

康威生命游戲 康威生命游戲(Conway’s Game of Life)是康威發明的細胞自動機。 生命游戲有幾個簡單的規則&#xff1a; 細胞有兩種狀態&#xff0c;存活或死亡&#xff0c;每個細胞以自身為中心與周圍的八格細胞互動。 對于存活的細胞&#xff1a; 當周圍的細胞過少(<2)或…

【Linux】:簡易實現自動化構建代碼make/Makefile

朋友們、伙計們&#xff0c;我們又見面了&#xff0c;本期來給大家解讀一下有關Linux自動化構建代碼make/makefile的使用&#xff0c;如果看完之后對你有一定的啟發&#xff0c;那么請留下你的三連&#xff0c;祝大家心想事成&#xff01; C 語 言 專 欄&#xff1a;C語言&…

Leo贈書活動-18期 《高效使用Redis》

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a; 贈書活動專欄 ?特色專欄&#xff1a;…

Ubuntu22部署MySQL5.7詳細教程

Ubuntu22部署MySQL5.7詳細教程 一、下載MySQL安裝包二、安裝MySQL三、啟動MySQL檢查狀態登錄MySQL 四、開啟遠程訪問功能1、允許其他主機通過root訪問數據庫2、修改配置文件&#xff0c;允許其他IP通過自定義端口訪問 五、使用Navicat連接數據庫 默認情況下&#xff0c;Ubuntu2…

Android的ViewModel

前言 在Compose的學習中&#xff0c;我們在可組合函數中使用rememberSaveable???????保存應用數據&#xff0c;但這可能意味著將邏輯保留在可組合函數中或附近。隨著應用體量不斷變大&#xff0c;您應將數據和邏輯從可組合函數中移出。 而在之前的應用架構學習中&…