這次帶給大家Three.js使用詳解,Three.js使用的注意事項有哪些,以下就是實戰案例,一起來看一下。
開場白
webGL可以讓我們在canvas上實現3D效果。而three.js是一款webGL框架,由於其易用性被廣泛應用。如果你要學習webGL,拋棄那些複雜的原生介面從這款框架入手是一個不錯的選擇。
部落客目前也在學習three.js,發現相關資料非常稀少,甚至官方的api文檔也非常粗糙,很多效果需要自己慢慢敲程式碼摸索。所以我寫這個教學的目的一是自己總結,二是跟大家分享。
本篇是系列教學的第一篇:入門篇。在這篇文章中,我將以一個簡單的demo為例,闡述three.js的基本配置方法。學完這篇文章,你將學會如何在瀏覽器中繪製一個立體圖形!
# 在寫程式之前,你首先要去下最新的three.js框架包,在你的頁面裡引入three.js,當然文件包裡面也有不少的demo便於大家學習;
# chrome是目前支援webGL最好的瀏覽器,Firefow居其次,國內的遨遊、獵豹經測試也可以運作。
從實例開始入門!
# 首先我們搭建html,如下:
nbsp;html> <meta> <title>lesson1-by-shawn.xie</title> <!--引入Three.js--> <script></script> <style> p#canvas-frame{ border: none; cursor: move; width: 1400px; height: 600px; background-color: #EEEEEE; } </style> <!--盛放canvas的容器--> <p></p>
# 準備和畫布框大小一致的領域用於WebGL繪製。具體來說:
(1) body 標籤中新增 id 為「canvas3d」的 p 元素。
(2) style 標籤中指定 “canvas3d”的CSS樣式。
要注意的是,我們不需要寫一個
下面我們開始寫腳本,我們將透過以下五步驟建構一個簡單的立體模型,這也是three.js的基本步驟:
1.設定three.js渲染器
# 三維空間裡的物體映射到二維平面的過程稱為三維渲染。一般來說我們都把進行渲染操作的軟體叫做渲染器。具體來說要進行下面這些處理。
(0) 宣告全域變數(物件);
# (1) 取得畫布「canvas-frame」的高寬;
# (2) 產生渲染器物件(屬性:抗鋸齒效果為設定有效);
(3) 指定渲染器的高寬(和畫布框大小一致);
# (4) 追加 【canvas】 元素到 【canvas3d】 元素中;
# (5) 設定渲染器的清除色(clearColor)。
//开启Three.js渲染器 var renderer;//声明全局变量(对象) function initThree() { width = document.getElementById('canvas3d').clientWidth;//获取画布「canvas3d」的宽 height = document.getElementById('canvas3d').clientHeight;//获取画布「canvas3d」的高 renderer=new THREE.WebGLRenderer({antialias:true});//生成渲染器对象(属性:抗锯齿效果为设置有效) renderer.setSize(width, height );//指定渲染器的高宽(和画布框大小一致) document.getElementById('canvas3d').appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。 renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor) }
2.設定攝影機camera
OpenGL(WebGL)中、三維空間中的物件投影到二維空間的方式中,有透視投影和正投影兩種相機。 透視投影就是、從視點開始越近的物體越大、遠處的物體繪製的較小的一種方式、和日常生活中我們看物體的方式是一致的。 正投影就是不管物體和視點距離,都按照統一的大小進行繪製、在建築和設計等領域需要從各個角度來繪製物體,因此這種投影被廣泛應用。在 Three.js 也能夠指定透視投影和正投影兩種方式的相機。本文依照以下的步驟設定透視投影方式。
(0) 宣告全域的變數(物件);
(1) 設定透視投影的相機;
# (2) 設定相機的位置座標;
# (3) 設定相機的上為「z」軸方向;
(4) 設定視野的中心座標。
//设置相机 var camera; function initCamera() { camera = new THREE.PerspectiveCamera( 45, width / height , 1 , 5000 );//设置透视投影的相机,默认情况下相机的上方向为Y轴,右方向为X轴,沿着Z轴朝里(视野角:fov 纵横比:aspect 相机离视体积最近的距离:near 相机离视体积最远的距离:far) camera.position.x = 0;//设置相机的位置坐标 camera.position.y = 50;//设置相机的位置坐标 camera.position.z = 100;//设置相机的位置坐标 camera.up.x = 0;//设置相机的上为「x」轴方向 camera.up.y = 1;//设置相机的上为「y」轴方向 camera.up.z = 0;//设置相机的上为「z」轴方向 camera.lookAt( {x:0, y:0, z:0 } );//设置视野的中心坐标 }
3.設定場景scene
場景就是一個三維空間。用 [Scene] 類別宣告一個叫 [scene] 的物件。
//设置场景 var scene; function initScene() { scene = new THREE.Scene(); }
4.設定光源light
OpenGL(WebGL)的三维空间中,存在点光源和聚光灯两种类型。 而且,作为点光源的一种特例还存在平行光源(无线远光源)。另外,作为光源的参数还可以进行 [环境光] 等设置。 作为对应, Three.js中可以设置 [点光源(Point Light)] [聚光灯(Spot Light)] [平行光源(Direction Light)],和 [环境光(Ambient Light)]。 和OpenGL一样、在一个场景中可以设置多个光源。 基本上,都是环境光和其他几种光源进行组合。 如果不设置环境光,那么光线照射不到的面会变得过于黑暗。 本文中首先按照下面的步骤设置平行光源,在这之后还会追加环境光。
(0) 声明全局变量(对象)
(1) 设置平行光源
(2) 设置光源向量
(3) 追加光源到场景
这里我们用「DirectionalLight」类声明一个叫 [light] 的对象来代表平行光源
//设置光源 var light; function initLight() { light = new THREE.DirectionalLight(0xff0000, 1.0, 0);//设置平行光源 light.position.set( 200, 200, 200 );//设置光源向量 scene.add(light);// 追加光源到场景 }
5.设置物体object
这里,我们声明一个球模型
//设置物体 var sphere; function initObject(){ sphere = new THREE.Mesh( new THREE.SphereGeometry(20,20), //width,height,depth new THREE.MeshLambertMaterial({color: 0xff0000}) //材质设定 ); scene.add(sphere); sphere.position.set(0,0,0); }
最后,我们写一个主函数执行以上五步:
//执行 function threeStart() { initThree(); initCamera(); initScene(); initLight(); initObject(); renderer.clear(); renderer.render(scene, camera); }
这时,测试以上程序,你会发现浏览器窗口中出现了你绘制的球形模型
总结
以上就是three.js的入门内容,我们核心的五步就是:
1.设置three.js渲染器
2.设置摄像机camera
3.设置场景scene
4.设置光源light
5.设置物体object
可能其中有些设置你还不太清楚,没关系,后面几篇文章会对以上五个主要步骤进行详细的讲解,敬请期待~~
本例完整代码:
nbsp;html> <meta> <title>lesson1-by-shawn.xie</title> <!--引入Three.js--> <script></script> <script> //开启Three.js渲染器 var renderer;//声明全局变量(对象) function initThree() { width = document.getElementById('canvas3d').clientWidth;//获取画布「canvas3d」的宽 height = document.getElementById('canvas3d').clientHeight;//获取画布「canvas3d」的高 renderer=new THREE.WebGLRenderer({antialias:true});//生成渲染器对象(属性:抗锯齿效果为设置有效) renderer.setSize(width, height );//指定渲染器的高宽(和画布框大小一致) document.getElementById('canvas3d').appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。 renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor) } //设置相机 var camera; function initCamera() { camera = new THREE.PerspectiveCamera( 45, width / height , 1 , 5000 );//设置透视投影的相机,默认情况下相机的上方向为Y轴,右方向为X轴,沿着Z轴朝里(视野角:fov 纵横比:aspect 相机离视体积最近的距离:near 相机离视体积最远的距离:far) camera.position.x = 0;//设置相机的位置坐标 camera.position.y = 50;//设置相机的位置坐标 camera.position.z = 100;//设置相机的位置坐标 camera.up.x = 0;//设置相机的上为「x」轴方向 camera.up.y = 1;//设置相机的上为「y」轴方向 camera.up.z = 0;//设置相机的上为「z」轴方向 camera.lookAt( {x:0, y:0, z:0 } );//设置视野的中心坐标 } //设置场景 var scene; function initScene() { scene = new THREE.Scene(); } //设置光源 var light; function initLight() { light = new THREE.DirectionalLight(0xff0000, 1.0, 0);//设置平行光源 light.position.set( 200, 200, 200 );//设置光源向量 scene.add(light);// 追加光源到场景 } //设置物体 var sphere; function initObject(){ sphere = new THREE.Mesh( new THREE.SphereGeometry(20,20), //width,height,depth new THREE.MeshLambertMaterial({color: 0xff0000}) //材质设定 ); scene.add(sphere); sphere.position.set(0,0,0); } //执行 function threeStart() { initThree(); initCamera(); initScene(); initLight(); initObject(); renderer.clear(); renderer.render(scene, camera); } </script> <style> p#canvas3d{ border: none; cursor: move; width: 1400px; height: 600px; background-color: #EEEEEE; } </style> <!--盛放canvas的容器--> <p></p>
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是Three.js使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)