過去,當我瀏覽各種網站時,我總是被第一眼看到的動態物體和具有深度感的動畫所吸引,不禁發出“哇!”的驚嘆。那時我就想,“我也想做出這樣的東西!”Three.js或者Blender我曾經嘗試過。
我當初懷著無比的敬佩之情加入Liberlogic,但最終…最近我主要從事一些更紮實的實施工作,例如建立業務應用程式和Headless CMS(笑)。我並不是想貶低他們什麼的!
現在我們已經進入第四年了,我回想起當時我對「動態網路」的渴望。WebGL我想簡單介紹週邊地區的基本情況。
什麼是WebGL?
什麼是WebGL?用於在網站上顯示 3D 圖形的技術它適用於所有主流瀏覽器,包括 Chrome、Firefox 和 Safari。
很久以前,像 Flash Player 這樣的插件很常見,但它們有難以在智慧型手機上運行的問題。
在這方面,WebGL 得到了原生支持,所以接下來開創移動時代3D表達先河的技術也可以說…
我真的試過了
使用 Three.js 在瀏覽器中顯示 3D 內容
Three.js使用 JavaScript一個無商標限制的函式庫,讓您可以輕鬆建立 3D 內容。
首先,就 WebGL 概念而言,你需要渲染器、場景和攝影機。
Renderer 是 Three.js 中的主要物件。Scene的Camera相機視錐體Renderer3D 內Scene該部件將以 2D 圖像的形式渲染(繪製)在畫布上。
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
1000, // 視野角
window.innerWidth / window.innerHeight, // 側面
75, // 近く
1000 // 遠い
);
camera.position.set(0, 0, 400);
//マウスで制御
const controls = new OrbitControls(camera, document.body);
//html側の<canvas id="myCanvas"></canvas>を取得
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector("#myCanvas"),
antialias: true,
});
//setSize()メソッドでサイズを設定
renderer.setSize(window.innerWidth, window.innerHeight);
//背景色も変更可能
renderer.setClearColor("#000")
//htmlの<canvas id="myCanvas"></canvas>へ流し込み
document.body.appendChild(renderer.domElement);
3D立方體部件是使用稱為網格的顯示物件建立的。要建立網格,您需要準備幾何體(形狀)和材質(材質)。
//幾何體(立方體)
const geometry = new THREE.BoxGeometry(100, 100, 100)
//材質(顏色)
const material = new THREE.MeshNormalMaterial
const box = new THREE.Mesh(geometry, material);
//加入場景
scene.add(box);
//光源
const light = new THREE.DirectionalLight(0xffffff, 1);
光.position.set(1, 1, 1);
//加入場景
scene.add(light);
最後,加入動畫效果。
這次我將省略周圍粒子的實作!
function animate() {
requestAnimationFrame(animate);
box.rotation.x += 0.005;
box.rotation.y += 0.005;
renderer.render(scene, camera);
}
animate()
當您使用設定好的攝影機、幾何、材質和燈光渲染場景時,它將在瀏覽器中繪製出來。
查看視訊文字稿(日文)
(直方体のジオメトリが3Dレンダリングされてブラウザに表示されている)
使用 Blender 建立 3D 模型
混合器免費、開源、整合的軟體,涵蓋整個 3D 製作流程,包括 3D 建模、動畫、渲染、遊戲開發和影片編輯。單靠Blender無法創建WebGL網站。
Blender 使用與 Three.js 相同的概念,使用網格物件創建形狀,使用材質添加顏色和紋理,使用燈光調整光線照射和投射陰影的方式,並調整相機位置和方向以執行渲染。
你可以透過組合節點來創造逼真的紋理,例如漸層、金屬效果和發光效果。
參考:https://www.youtube.com/watch?v=DsNZzUZPhw4
使用 Three.js 在瀏覽器中顯示用 Blender 建立的 3D 模型。
將 Blender 中建立的 3D 模型匯出為 .glb 文件,並將其整合到 Three.js 中。
OrbitControls、GLTFLoader、DRACOLoader從 Three.js 庫中匯入每個函數。
OrbitControls是一個用於透過滑鼠控制相機的實用程序,GLTFLoader和DRACOLoader分別是用於以 GLTF 格式及其壓縮版本 DRACO 格式載入 3D 模型的實用程式。
模擬的蘋果現在顯示在瀏覽器中了!
但是,當我使用 Three.js 在瀏覽器中顯示用 Blender 建立的模型時,渲染環境和材質相容性的差異根據材質的不同,顏色和紋理看起來會有所不同,因此您可能需要進行一些調整才能達到您想要的效果。
查看視訊文字稿(日文)
(Blenderで作成したりんごのモデリングをThree.jsでブラウザ表示した様子)
我的日常工作涉及 CMS 整合和業務應用程式的前端設計/構建,因此我自己的工作中很少接觸到 3D 表現形式。
但是當我這樣玩的時候,我又一次意識到這真的很有趣。
那時候行動網路或許正是因為他對過去的崇敬,他自然而然地被現代科技所吸引。
今天又是 Next 和 Nuxt!
以另一種形式重返該網站行動網路我一定能成功。 🚀
我使用 JavaScript、React 和 Next.js 進行前端開發,專注於標記語言。看到自己參與開發的網站成功上線,我感到非常開心!我的嗜好是彈吉他。我喜歡寫程式碼,也喜歡演奏程式碼!
Hiratchi
前端工程師 / 2022年入職