08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3

使用原生 JavaScript

首先是靜態頁面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ 文件夾中,引用參考:

const imageSource = '/files/image.png'console.log(imageSource)

簡單帶過一下使用原生JavaScript的步驟:

  1. 創建 Image 實例
  2. 監聽 image 的 load 事件
  3. 將texture變量提升為全局變量,并使用 Texture 類創建紋理
  4. 設置 image.src 屬性加載圖片,再將texture變量提升為全局變量
  5. 將texture應用到material中
const image = new Image()
const texture = new THREE.Texture(image)
texture.colorSpace = THREE.SRGBColorSpace  // 修正 `sRGB` 顏色空間造成的紋理色值偏差
image.addEventListener('load', () =>
{texture.needsUpdate = true  // 更新在函數外部創建的紋理
})
image.src = '/textures/door/color.jpg'// ...const material = new THREE.MeshBasicMaterial({ map: texture })

用于材質的 map 或 matcap 屬性的紋理應該以 sRGB 編碼,需要將 colorSpace 設置為 THREE.sRGBColorSpace,但僅限于這些紋理。

總結關鍵點:

1.  texture.colorSpace = THREE.SRGBColorSpace

2. texture.needsUpdate = true

【效果圖】

使用 TextureLoader

將上面原生JavaScript的引入改為 THREE.TextureLoader() 引入:

const textureLoader = new THREE.TextureLoader()
const texture = textureLoader.load('/textures/door/color.jpg')
texture.colorSpace = THREE.SRGBColorSpace

可以使用一個 TextureLoader 實例加載任意多的紋理(一對多)。如果現在有多個圖片需要加載,并且希望共享事件(比如在所有圖片加載完成后接收通知),可以使用THREE.LoadingManager() 與THREE.TextureLoader() 配合:

const loadingManager = new THREE.LoadingManager()
const textureLoader = new THREE.TextureLoader(loadingManager)

如果想要顯示加載器并在所有資源加載完成后隱藏它,LoadingManager 對這點非常有用,可以通過將以下屬性替換為自己的函數來監聽各種事件。

// LoadingManager的使用
const loadingManager = new THREE.loadingManager()
// 可以通過將以下屬性替換為自己的函數來監聽各種事件
loadingManager.onStart = ()=> {console.log('loading started!');    
}
loadingManager.onLoad = ()=> {console.log('loading finished!');    
}
loadingManager.onProgress = ()=> {console.log('loading progressing!');    
}
loadingManager.onError = ()=> {console.log('loading error!');    
}
const TextureLoader = new THREE.TextureLoader(loadingManager)

【擴展】ExrLoader

這次下載的素材中有以 .exr 后綴結尾的文件,經查需要通過 ExrLoader 進行導入,直接用

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

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

相關文章

git 倉庫取消合并的分支

要取消 Git 倉庫中某次特定的分支合并(例如第一次合并),同時保留其他分支的合并,需要通過 Git 的版本控制功能來操作。以下是具體的步驟和方法,假設你想撤銷某次合并(例如某個提交),并確保其他合并不受影響: 背景假設 你有一個 Git 倉庫,主分支(例如 main)上已經合…

【從歷史數據分析英特爾該如何擺脫困境】

與大多數其他分析師不同,自2013年以來,筆者就一直在積極強調英特爾未來將遭遇冰山,最終我們預測英特爾將在試圖執行其之前的戰略時破產。盡管我們更愿意采用與英特爾不同的代工廠方法(即與臺積電成立合資企業)&#xf…

【PyTorch】PyTorch中張量(Tensor)微分操作

PyTorch深度學習總結 第六章 PyTorch中張量(Tensor)微分操作 文章目錄 PyTorch深度學習總結前言一、torch.autograd模塊二、主要功能和使用方法1. 張量的 requires_grad 屬性2. backward() 方法3. torch.no_grad() 上下文管理器三、函數總結前言 上文介紹了PyTorch中張量(Ten…

Rust 項目實戰:Flappy Bird 游戲

Rust 項目實戰:Flappy Bird 游戲 Rust 項目實戰:Flappy Bird 游戲理解 Game loop開發庫:bracket-libbracket-terminalCodepage 437導入 bracket-lib 創建游戲游戲的模式添加玩家添加障礙最終效果項目源碼 Rust 項目實戰:Flappy Bi…

Gin 中間件詳解與實踐

一、中間件的核心概念 定義 中間件是Web開發中非常重要的概念,它可以在請求到達最終處理函數之前或響應返回客戶端之前執行一系列操作。Gin 框架支持自定義和使用內置的中間件,讓你在請求到達路由處理函數前進行一系列預處理操作。 它是介于請求與響應處…

非接觸式DIC測量系統:助力汽車研發與測試的創新技術應用

近年來,隨著新能源汽車品牌的快速崛起,新車發布的節奏加快,層出不窮的新產品,給消費者帶來了全新的使用體驗。與此同時,變革的產品體驗也讓一些過往的汽車測試和評價標準變得不再適用,尤其是與過往燃油車型…

FOC學習筆記(7)鎖相環(PLL)原理及其在電機控制中的應用

1. 鎖相環(PLL)概述 鎖相環(Phase-Locked Loop, PLL)是一種閉環控制系統,用于使輸出信號的相位與輸入參考信號的相位同步。PLL廣泛應用于通信、電機控制、頻率合成、時鐘恢復等領域。在電機無傳感器控制(Sensorless Control&…

鴻蒙自定義相機的拍照頁面

1、權限申請 "requestPermissions": [{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["EntryAbility"]}},{"name": "oh…

greenplum7.2并行備份及恢復

1.并行備份 pg_dump -Fd --gp-syntax -U gpadmin -p 5432 -h 172.19.0.2 -d postgres -j 4 -f /opt/greenplum/data/postgres_backup_$(date %Y-%m-%d) 參數 含義 -Fd 使用 directory 格式(支持并行) --gp-syntax 使用 Greenplum 特定語法(…

備賽2025年初中古詩文大會:練習歷年真題,吃透知識點(0703)

初中古詩文大會的比賽內容古詩詞、文言文各占比50%左右,從歷年的比賽來看,中考語文的古詩文部分(35分)涉及到的古詩詞、文言文知識點都在初中古詩文大會中考過。這些知識點掌握了,對于將來高中、高考也有直接的幫助。 …

BRAKER:真核微生物cds和蛋白注釋

https://github.com/Gaius-Augustus/BRAKER 安裝 # 第一次打開會pull這個docker docker run --user 1000:100 --rm -it teambraker/braker3:latest bash bash /opt/BRAKER/example/docker-tests/test3.sh braker.gtf:BRAKER 的最終基因集。 braker.codingseq&am…

基于 Three.js 與 WebGL 的商場全景 VR 導航系統源碼級解析

本文面向Web前端開發者、WebGL/Three.js 愛好者、對VR/AR應用開發感興趣的技術人員、智慧商場解決方案開發者。詳細介紹如何利用 WebGL (Three.js框架) 構建高性能的商場全景VR環境,并實現精準的室內定位與3D路徑規劃導航功能。 如需獲取商場全景VR導航系統解決方案…

AWS CloudFormation部署雙可用區VPC網絡架構 - 完整指南

一、模板概述 本CloudFormation模板用于在AWS上快速部署一個高可用的雙可用區VPC網絡架構,包含公有子網和私有子網。該架構是構建云原生應用的基礎,特別適合生產環境使用。 二、完整模板代碼 AWSTemplateFormatVersion: 2010-09-09 Description: Customizable dual-AZ VPC…

2025汽車聲學升級:高透音汽車喇叭網成高端車型新標配

隨著消費者對車載音質和靜謐性要求的提升,高透音汽車喇叭網正成為高端車型的差異化配置。傳統沖壓金屬網因聲學損耗大、設計單一逐漸被淘汰,而新一代蝕刻工藝通過微孔結構優化,實現了聲學性能與美學設計的雙重突破。以下是技術趨勢與市場前景…

決策樹(Decision tree)算法詳解(ID3、C4.5、CART)

文章目錄 一、決策樹介紹1.1 決策樹的結構特征1.2 決策樹的構建三步驟1.3 決策樹構建例子 二、ID3決策樹:基于信息增益的決策模型2.1 信息增益的公式與符號解析2.2 信息增益的意義2.3 ID3決策樹案例演示:貸款申請分類2.4 ID3決策樹缺陷 三、C4.5決策樹&a…

python基礎-網絡的TCP、UDP協議操作

1.tcp基本語法 # ### TCP協議 客戶端 import socket # 1.創建一個socket對象 sk socket.socket() # 2.與服務端建立連接 sk.connect( ("127.0.0.1" , 9000) ) # 3.收發數據的邏輯 """發送的數據類型是二進制字節流""" ""&q…

基于spark的航班價格分析預測及可視化

基于spark的航班價格分析預測及可視化 項目概況 [👇👇👇👇👇👇👇👇] 點這里,查看所有項目 [👆👆👆👆👆👆&…

每日算法刷題Day41 6.28:leetcode前綴和2道題,用時1h20min(要加快)

5. 523.連續的子數組和(中等,學習) 523. 連續的子數組和 - 力扣(LeetCode) 思想 1.給你一個整數數組 nums 和一個整數 k ,如果 nums 有一個 好的子數組 返回 true ,否則返回 false: 一個 好的子數組 是:…

拉取vue-element-admin

這個錯誤表明 npm 在嘗試通過 SSH 克隆 GitHub 倉庫時遇到了權限問題,根本原因是系統無法正確處理中文用戶名路徑下的 SSH 配置。以下是詳細的解決方案: 解決方案 1:使用 HTTPS 代替 SSH(推薦) 修改 Git 全局配置&…

c語言的數組注意事項

在C語言中,int()[5]和int是兩種完全不同的指針類型,理解它們的區別對于正確處理數組和多維數組至關重要。下面詳細解釋: 1:int*(指向整型的指針) 含義:指向單個int類型數據的指針典型用法&…