国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

這篇具有很好參考價值的文章主要介紹了Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????這十年來 web 得到了快速的發(fā)展,隨著 webgl 的普及,網(wǎng)頁的表現(xiàn)能力越來越強大,網(wǎng)頁上已經(jīng)開始可以做出很多復雜的動畫和精美的效果,還可以通過 webgl 在網(wǎng)頁中繪制高性能的3d圖形,別的不說,凡是入門程序員都離不開github這個網(wǎng)站,細心的人都會發(fā)現(xiàn),github首頁就使用了3d可視化技術(shù),如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

對于網(wǎng)站而言,web 3d 技術(shù)應用,實現(xiàn)了企業(yè)網(wǎng)站的三維呈現(xiàn),讓企業(yè)形象更加直觀更立體的展現(xiàn)給客戶,打破傳統(tǒng)平面展示模式,而傳統(tǒng)的3d技術(shù)shader直接讓前端開發(fā)者去挑戰(zhàn)的話其實是有難度的,因為其和前端真的就是兩種不一樣的東西,由此適配前端開發(fā)者使用3d技術(shù)的three.js應運而生,讓前端開發(fā)者掌握3d技術(shù)不再是夢,接下來本專欄將詳細介紹three.js的詳細使用,以及相關(guān)項目的展現(xiàn),關(guān)注博主訂閱專欄,讓學習之路不再迷茫。

目錄

初識Three.js

Three.js的下載與使用

空間實現(xiàn)3d立方體旋轉(zhuǎn)

空間實現(xiàn)3d立方體移動

空間實現(xiàn)3d立方體縮放與旋轉(zhuǎn)

空間實現(xiàn)3d立方體地面以及陰影效果


初識Three.js

Three.js是瀏覽器調(diào)用電腦渲染模塊的webgl框架,但threejs并不是webgl,webgl本身也有自己非常底層的代碼,這方面就涉及一些3d邏輯了,感興趣的朋友可以自己去了解一下,本專欄將著重講解threejs,講解threejs執(zhí)行的一些webgl的一些功能。

注意:會three.js并不意味著你已經(jīng)非常掌握了3d建模了,這是兩個概念,建模需要的是專業(yè)的建模軟件如:3dmax、rhino、maya、blender等,復雜的項目需要專門的建模師搭建模型,然后交給前端來呈現(xiàn)在網(wǎng)頁上,并不是前端來實現(xiàn)建模,而three.js就是建模師和前端溝通的橋梁,當然threejs也能實現(xiàn)一些簡單的3d效果,但是非常復雜的3d建模還是需要專門的建模師來完成。

Three.js版本問題:Three.js處于飛速發(fā)展之中,過去幾年和現(xiàn)在的Three.js基本上每個月都會發(fā)布一個新的版本,主要是增加一些新的功能,也可能廢棄或更改某些API,去three.js官網(wǎng)下載的three.js默認都是最新版本的,在實際開發(fā)過程中,three.js中的API的使用規(guī)則,一切以你項目中的three.js版本對應的文檔為準。

Three.js的下載與使用

關(guān)注我的人都知道,在很早的之前我就說過,博主不可能會將所有的知識講解全都面面俱到,我個人僅僅是對知識的一個拋磚引玉而言,算是一個引路人,要想了解更加具體的知識,還是推薦大家詳細看看?three.js官方文檔 的講解。如果你想查看three.js的所有版本文檔 推薦網(wǎng)址 ,里面詳細介紹了每個版本新添加的功能以及相關(guān)的使用方法,下載的話滑到當前版本的最下面,點擊下面的zip進行解壓縮下載即可:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

在項目中引入three.js的話,比如說你采用的是Vue+threejs或React+threejs技術(shù)棧,這很簡單啊threejs就是一個js庫,直接通過npm命令行安裝就行, 注意:使用哪個版本的threejs,查文檔就查對應的版本。安裝方式可參考官方文檔,如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

如果你是正式項目的話一定是選擇npm安裝而不是使用CDN,官方雖然推薦我們使用webpack,但是我個人還是選擇使用vite來使用,因為其打包的速度更快效率高一點,不過這個還是看個人選擇,接下來我將使用vite來創(chuàng)建react項目,不知道如何使用vite來創(chuàng)建項目的可以參考我之間寫的文章:超詳細教程——vite腳手架的搭建與使用 。

入門three.js的第一步就是認識場景Scene、相機Camera、渲染器Renderer三個基本概念

三維場景Scene:理解為虛擬的3D場景,用來表示模擬生活中的真實三維場景或三維世界

透視相機Camera:模擬人眼所看到的景象,是3D場景的渲染中使用得最普遍的投影模式。

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

渲染器Renderer:用WebGL渲染出精心制作的場景。

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

空間實現(xiàn)3d立方體旋轉(zhuǎn)

接下來實現(xiàn)個小Demo,我使用的是React+Vite,代碼如下:

import * as THREE from 'three';

// 1.創(chuàng)建場景
const scene = new THREE.Scene();
// 2.創(chuàng)建相機
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000)
// 設置x、y、z軸坐標,即設置相機位置
camera.position.set(0,0,10)
// 將相機添加到場景之中
scene.add(camera)
// 3.添加物體,創(chuàng)建幾何體
const cubeGeometry = new THREE.BoxGeometry(1,1,1) // 設置幾何體大小
const cubeMaterial = new THREE.MeshBasicMaterial({color:0xffff00}) // 設置幾何體材質(zhì)
// 根據(jù)幾何體和材質(zhì)創(chuàng)建物體
const cube = new THREE.Mesh(cubeGeometry,cubeMaterial)
// 將幾何體添加到場景之中
scene.add(cube)
// 4.初始化渲染器
const renderer = new THREE.WebGLRenderer()
// 設置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight)
// 將webgl渲染的canvas內(nèi)容添加到body上
document.body.appendChild(renderer.domElement)
// 使用渲染器,通過相機將場景渲染出來
export const result = renderer.render(scene,camera)
import { result } from "./three/three1"
import './App.css'

const App = () => {
  return (
    <div className="container">
      {result}
    </div>
  )
}
export default App

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

因為React的渲染機制,不建議將three.js代碼直接寫在函數(shù)式組件中,而是要單獨封裝在一個js文件中,通過按需導入導出即可,結(jié)果如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

接下來我們需要導入 軌道控制器,目的是通過控制器查看3d物體。就相當于拿著我們定義好的相機,圍繞著我們定義的物體360度旋轉(zhuǎn)的去觀看,如下:

import * as THREE from 'three';

// 導入軌道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

// 1.創(chuàng)建場景
const scene = new THREE.Scene();
// 2.創(chuàng)建相機
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000)
// 設置x、y、z軸坐標,即設置相機位置
camera.position.set(0,0,10)
// 將相機添加到場景之中
scene.add(camera)
// 3.添加物體,創(chuàng)建幾何體
const cubeGeometry = new THREE.BoxGeometry(1,1,1) // 設置幾何體大小
const cubeMaterial = new THREE.MeshBasicMaterial({color:0xffff00}) // 設置幾何體材質(zhì)
// 根據(jù)幾何體和材質(zhì)創(chuàng)建物體
const cube = new THREE.Mesh(cubeGeometry,cubeMaterial)
// 將幾何體添加到場景之中
scene.add(cube)
// 4.初始化渲染器
const renderer = new THREE.WebGLRenderer()
// 設置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight)
// 將webgl渲染的canvas內(nèi)容添加到body上
document.body.appendChild(renderer.domElement)
// // 使用渲染器,通過相機將場景渲染出來
// export const result = renderer.render(scene,camera)

// 創(chuàng)建軌道控制器
new OrbitControls(camera,renderer.domElement)
export function render(){
  renderer.render(scene,camera)
  // 接下來渲染下一幀的時候就會調(diào)用render函數(shù)
  requestAnimationFrame(render)
}
// 先開始就渲染一下
render()

在App中調(diào)用我們導出的這個render函數(shù),如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

接下來可以給這個立方體添加坐標軸輔助線,讓其可以更具體的展示給我們,設置輔助線的話可以參考一下官網(wǎng)給我們提供的函數(shù):AxesHelper 。

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

空間實現(xiàn)3d立方體移動

承接上文立方體的樣式,接下來實現(xiàn)3d立方體的移動,實現(xiàn)移動的話可以使用position的set方法,來改變空間物體的向量值,如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

當然我們也可以在每次渲染其函數(shù)的地方,設置一下每次渲染加一點位置,超過一定距離從零開始,這樣也能實現(xiàn)一下立方體移動的效果,如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

空間實現(xiàn)3d立方體縮放與旋轉(zhuǎn)

實現(xiàn)物體的縮放與旋轉(zhuǎn)可以通過操作,然后 .set 進行設置數(shù)值,如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

空間實現(xiàn)3d立方體地面以及陰影效果

實現(xiàn)生成平面幾何的類的方法如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

給出代碼如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

首先我們先設置光源,然后設置陰影效果并將其加到場景當中,如下:

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs

本篇文章算是three.js的啟蒙篇,對于基礎不是很好的人可能看的比較吃力,后面我盡量每個案例都寫的詳細一點,希望大家都能看懂學會,每次寫完后,我都會將文章寫的three.js代碼都共享出來,歡迎大家學習!如果大家覺得不錯的話,可以給博主一鍵三聯(lián),您的支持就是博主創(chuàng)作的最大動力。文章來源地址http://www.zghlxwxcb.cn/news/detail-427163.html

import * as THREE from 'three';

// 導入軌道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'

// 1.創(chuàng)建場景
const scene = new THREE.Scene();
// 2.創(chuàng)建相機
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000)
// 設置x、y、z軸坐標,即設置相機位置
camera.position.set(0,0,10)
// 將相機添加到場景之中
scene.add(camera)
// 3.添加物體,創(chuàng)建幾何體
const cubeGeometry = new THREE.BoxGeometry(1,1,1) // 設置幾何體大小
const cubeMaterial = new THREE.MeshLambertMaterial({color:0xff0000}) // 設置幾何體材質(zhì)
// 根據(jù)幾何體和材質(zhì)創(chuàng)建物體
const cube = new THREE.Mesh(cubeGeometry,cubeMaterial)

// 修改物體的位置
// cube.position.set(5,0,0)
cube.position.y = 1.5
// 實現(xiàn)物體的縮放
cube.scale.set(3,2,1) // x、y、z軸的縮放倍數(shù)
// Math.PI是180度,rotation也是以x、y、z進行設置
cube.rotation.set(Math.PI / 4,0,0,"XYZ")
cube.castShadow = true

// 將幾何體添加到場景之中
scene.add(cube)
// 4.初始化渲染器
const renderer = new THREE.WebGLRenderer()
// 設置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight)
// 渲染陰影
renderer.shadowMap.enabled = true
// 將webgl渲染的canvas內(nèi)容添加到body上
document.body.appendChild(renderer.domElement)
// // 使用渲染器,通過相機將場景渲染出來
// export const result = renderer.render(scene,camera)

// 創(chuàng)建地面網(wǎng)格參照
const planeGeometry = new THREE.PlaneGeometry(30,30) // 平面幾何的寬高
const PlaneMateial = new THREE.MeshLambertMaterial({color:0xF8F8FF}) // 幾何平面的顏色
const plane = new THREE.Mesh(planeGeometry,PlaneMateial)
plane.rotation.x = -0.5*Math.PI
plane.position.set(0,0,0)
plane.receiveShadow = true
scene.add(plane)
// 設置光源投影
const ambienLight = new THREE.AmbientLight(0xAAAAA)
scene.add(ambienLight)

// 設置光源
const spotLight = new THREE.SpotLight(0xFFFFFF) // 設置聚光燈
spotLight.position.set(-60,40,-65)
spotLight.castShadow = true //讓聚光燈產(chǎn)生陰影
// 下面三行代碼設置陰影效果
spotLight.shadow.mapSize = new THREE.Vector2(1024,1024)
spotLight.shadow.camera.far = 130
spotLight.shadow.camera.near = 40
// 將陰影添加到場景中
scene.add(spotLight)


// 創(chuàng)建軌道控制器
new OrbitControls(camera,renderer.domElement)

// 添加坐標軸輔助器
const axesHelper = new THREE.AxesHelper(5) // 數(shù)值代表線的長度
scene.add(axesHelper) // 添加到場景之中

export function render(){
  cube.position.x +=0.01
  cube.rotation.x +=0.01
  if(cube.position.x>5){
    cube.position.x = 0
  }
  renderer.render(scene,camera)
  // 接下來渲染下一幀的時候就會調(diào)用render函數(shù)
  requestAnimationFrame(render)
}
// 先開始就渲染一下
render()

到了這里,關(guān)于Three.js--》前端開發(fā)者掌握3d技術(shù)不再是夢,初識threejs的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 除了three.js,還有許多其他前端開發(fā)語言和庫可以用于創(chuàng)建3D可視化大屏

    除了three.js,還有許多其他前端開發(fā)語言和庫可以用于創(chuàng)建3D可視化大屏

    hello老鐵們...本人熟悉html5,vue對bootsrap,uniapp,layui,element,vite,antd,echarts,jq響應式尤其擅長,ui設計等技能,如果ui前端工作中有遇到煩惱可私信關(guān)注評論我們共同交流進步!謝謝?? ? ? 隨著前端技術(shù)的飛速發(fā)展,3D可視化已經(jīng)成為許多應用場景中不可或缺的一部分。在

    2024年03月15日
    瀏覽(98)
  • Java開發(fā)者的Python快速進修指南:掌握T檢驗

    T檢驗是一種用于比較兩個獨立樣本均值差異的統(tǒng)計方法。它通過計算T值和P值來判斷樣本之間是否存在顯著性差異。通常情況下,我們會有兩組數(shù)據(jù),例如一組實驗組和一組對照組。 T檢驗的原假設是兩組樣本的均值相等,備假設是兩組樣本的均值不相等。T檢驗會計算一個

    2024年03月09日
    瀏覽(47)
  • 掌握 JavaScript:從初學者到高級開發(fā)者的完整指南(一)

    掌握 JavaScript:從初學者到高級開發(fā)者的完整指南(一)

    html完成了架子,css做了美化,但是網(wǎng)頁是死的,我們需要給他注入靈魂,所以我們需要學習JavaScript,這門語言會讓我們的頁面能夠和用戶進行交互。 同樣,js代碼也是書寫在html中的,那么html中如何引入js代碼呢?主要通過下面的2種引入方式: 第一種方式 :內(nèi)部腳本,將

    2024年02月07日
    瀏覽(37)
  • 掌握 JavaScript:從初學者到高級開發(fā)者的完整指南(三)

    掌握 JavaScript:從初學者到高級開發(fā)者的完整指南(三)

    BOM的全稱是Browser Object Model,翻譯過來是瀏覽器對象模型。也就是JavaScript將瀏覽器的各個組成部分封裝成了對象。我們要操作瀏覽器的部分功能,可以通過操作BOM對象的相關(guān)屬性或者函數(shù)來完成。例如:我們想要將瀏覽器的地址改為 http://www.baidu.com ,我們就可以通過BOM中提供的

    2024年02月06日
    瀏覽(32)
  • .net開發(fā)者應掌握的利器CommunityToolkit.HighPerformance——MemoryOwner與SpanOwner

    MemoryOwner和SpanOwner都可以理解為是對ArrayPool的一個包裝,無非一個是在堆棧上,一個是在托管堆上。既然做了包裝,那肯定隨之而來就是改進和優(yōu)化。 目錄 MemoryOwner MemoryOwner解決的問題 SpanOwner 總結(jié) MemoryOwner MemoryOwner解決的問題 1.通過ArrayPool的Api MemoryPool .Shared.Rent(size) 獲得的

    2024年02月07日
    瀏覽(60)
  • 如何成為一名高效的前端開發(fā)者(10X開發(fā)者)

    如何成為一名高效的前端開發(fā)者(10X開發(fā)者)

    如今,每個人都想成為我們所說的“10倍開發(fā)者”。然而,這個術(shù)語經(jīng)常被誤解和高估。 本質(zhì)上,一個高效或者10倍開發(fā)者,在我看來,是指那些能夠充分利用所有可用工具的人,通過讓這些工具處理冗余和重復的任務,使他們能夠?qū)W⒂趶碗s和創(chuàng)造性的工作。以下是一些成

    2024年02月05日
    瀏覽(25)
  • 掌握 JavaScript:從初學者到高級開發(fā)者的完整指南之JavaScript對象(二)

    掌握 JavaScript:從初學者到高級開發(fā)者的完整指南之JavaScript對象(二)

    可以大體分頁3大類: 第一類:基本對象,我們主要學習Array和JSON和String 第二類:BOM對象,主要是和瀏覽器相關(guān)的幾個對象 第三類:DOM對象,JavaScript中將html的每一個標簽都封裝成一個對象 1.1.1 基本對象 1.1.1.1 Array對象 語法格式 Array對象時用來定義數(shù)組的。常用語法格式有如下

    2024年02月07日
    瀏覽(25)
  • 推薦前端開發(fā)者提升效率的工具

    推薦前端開發(fā)者提升效率的工具

    是否掌握新的技術(shù)很大程度決定著你是否被淘汰。 雖然應用程序試圖將網(wǎng)站替代,但前端 Web 開發(fā)業(yè)務仍在快速變化和增長,前端開發(fā)人員的功能并沒有消失。以下介紹一款前端開發(fā)者提升效率的工具。 目錄 一、低代碼工具前景 二、如何理解低代碼工具 三、前端低代碼工具

    2024年02月14日
    瀏覽(17)
  • 短視頻矩陣營銷系統(tǒng)技術(shù)開發(fā)者開發(fā)筆記分享

    短視頻矩陣營銷系統(tǒng)技術(shù)開發(fā)者開發(fā)筆記分享

    1. 確定系統(tǒng)需求:根據(jù)客戶的需求,確定系統(tǒng)的功能和特點,例如用戶注冊登錄、視頻上傳、視頻瀏覽、評論點贊等。 2. 設計系統(tǒng)架構(gòu):根據(jù)系統(tǒng)需求,設計系統(tǒng)的整體架構(gòu),包括前端、后端、數(shù)據(jù)庫等組件的功能和交互方式。 3. 選擇技術(shù)棧:根據(jù)系統(tǒng)的特點和需求,選擇

    2024年02月14日
    瀏覽(26)
  • 低代碼前端開發(fā)者必備:異常監(jiān)控日志系統(tǒng)

    低代碼前端開發(fā)者必備:異常監(jiān)控日志系統(tǒng)

    某客戶:“你們的系統(tǒng)怎么又報錯了?給你們一天時間修好,等著用!” 溝通中:詢問客戶具體問題,他表示某某功能用不了,某某功能也用不了,而且無法復現(xiàn)。 - 你會怎么處理? 答案1:先看看說明書? 答案2:好的,我們馬上安排研發(fā)團隊查找問題,順便也請您幫忙看

    2024年04月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包