ThreeJS核心組成

前言:

? ? ? ?學(xué)習(xí)threeJS完全是機(jī)緣巧合,記得有次客戶(hù)提到我們系統(tǒng)(當(dāng)時(shí)在職的公司產(chǎn)品)的數(shù)據(jù)總是以二維表的數(shù)據(jù)顯示,略顯枯燥乏味。所以那會(huì)我開(kāi)始逐步摸索數(shù)據(jù)可視化(說(shuō)白了就是網(wǎng)上找資料),了解到echarts,確實(shí)能然數(shù)據(jù)顯示的更加漂亮。但是后面發(fā)現(xiàn)3D的echarts圖形加載有點(diǎn)耗時(shí),在查閱了很多資料后,關(guān)注點(diǎn)轉(zhuǎn)移到了threeJS與thinkJS身上,但是當(dāng)我得知thinkJS居然要收費(fèi),作為一個(gè)窮*,果斷放棄。。。確定了涉獵threeJS,此次,主要和各位看官分享threeJS中的基礎(chǔ)功能組成。

(簡(jiǎn)書(shū).YZJGOOD原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處)

正文:

threeJS模型頁(yè)面展示主要構(gòu)成:

場(chǎng)景(網(wǎng)格模型(具體實(shí)物+材質(zhì))+光照(點(diǎn)光源(陰影)+環(huán)境光源))+相機(jī)+渲染(鼠標(biāo)縮放拖動(dòng)之類(lèi)的)

案例如下:

需要注意:引入關(guān)鍵js : three.js ; OrbitControls.js

<script>

? ? /* 創(chuàng)建場(chǎng)景對(duì)象Scene*/

? ? var scene = new THREE.Scene();

? ? /*創(chuàng)建網(wǎng)格模型*/

? ? var geometry = new THREE.BoxGeometry(200, 200, 200); //創(chuàng)建一個(gè)立方體幾何對(duì)象Geometry

var material = new THREE.MeshLambertMaterial({

? ? ? color: 0x00ffff

? ? });

//材質(zhì)對(duì)象Material(MeshLambertMaterial確定了它的屬性)

? ? var mesh = new THREE.Mesh(geometry, material); //網(wǎng)格模型對(duì)象Mesh(將具體實(shí)物+材質(zhì)添加進(jìn)來(lái))

? ? scene.add(mesh); //網(wǎng)格模型添加到場(chǎng)景中

? ? /* 光源設(shè)置 */

? ? //點(diǎn)光源

? ? var point = new THREE.PointLight(0x999999);//PointLight屬性確定了它是點(diǎn)光源

? ? point.position.set(400, 200, 300); //點(diǎn)光源位置(說(shuō)白了就是這個(gè)光的起點(diǎn))??

? ? scene.add(point); //點(diǎn)光源添加到場(chǎng)景中

? ? //環(huán)境光

? ? var ambient = new THREE.AmbientLight(0x888888);//AmbientLight屬性確定了它是環(huán)境光源

? ? scene.add(ambient);

? ? /* 相機(jī)設(shè)置*/

? ? var width = window.innerWidth; //窗口寬度

? ? var height = window.innerHeight; //窗口高度

? ? var k = width / height; //窗口寬高比

? ? var s = 150; //三維場(chǎng)景顯示范圍控制系數(shù),系數(shù)越大,顯示的范圍越大

? ? ?/*創(chuàng)建相機(jī)對(duì)象*/

? ? var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);

? ? camera.position.set(200, 300, 200); //設(shè)置相機(jī)位置(相機(jī)從哪個(gè)方位照過(guò)去)

? ? camera.lookAt(scene.position); //設(shè)置相機(jī)方向(指向的場(chǎng)景對(duì)象)

? ? /*創(chuàng)建渲染器對(duì)象*/

? ? var renderer = new THREE.WebGLRenderer();

? ? renderer.setSize(width, height); //設(shè)置渲染區(qū)域尺寸

? ? renderer.setClearColor(0xb9d3ff, 1); //設(shè)置背景顏色

? ? document.body.appendChild(renderer.domElement); //body元素中插入canvas對(duì)象

? ? //有時(shí)我們不一定要把canvas對(duì)象插入body下面,也有可能插入到某一元素下面

? ? ?document.getElementById('models').appendChild(renderer.domElement); //models元素中插入canvas對(duì)象

? ? /*鼠標(biāo)拖拽控制*/

? ? // 渲染函數(shù)

? ? function render() {

? ? ? renderer.render(scene, camera); //執(zhí)行渲染操作

? ? }

? ? render();

? ? var controls = new THREE.OrbitControls(camera,renderer.domElement);//創(chuàng)建一個(gè)控制對(duì)象

? ? controls.addEventListener('change', render);//監(jiān)聽(tīng)鼠標(biāo)事件,觸發(fā)渲染函數(shù),已達(dá)到拖拽旋轉(zhuǎn)效果


//周期變化控制

? ? function render() {

? ? ? renderer.render(scene, camera); //執(zhí)行渲染操作

? ? ? mesh.rotateY(0.1);//按照一定的周期每次繞y軸旋轉(zhuǎn)0.1弧度

? ? ? requestAnimationFrame(render);//請(qǐng)求再次執(zhí)行渲染函數(shù)render,循環(huán)往復(fù)

? ? }

? ? render();

? ? ////創(chuàng)建一個(gè)控制對(duì)象,保障了鼠標(biāo)能夠進(jìn)行拖拽設(shè)置

? ? var controls = new THREE.OrbitControls(camera,renderer.domElement);

? </script>


? 好的,這次的分享就到這里,謝謝!

(簡(jiǎn)書(shū).YZJGOOD原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Threejs 為什么? webGL太難用,太復(fù)雜! 但是現(xiàn)代瀏覽器都支持 WebGL 這樣我們就不必使用 Fla...
    強(qiáng)某某閱讀 6,481評(píng)論 1 21
  • 馬上就要畢業(yè)了,實(shí)習(xí)進(jìn)入了一個(gè)GIS公司,任務(wù)要求使用Threejs寫(xiě)個(gè)漸變的發(fā)光半球小特效,我完成后決定寫(xiě)出這篇...
    gardenlike2閱讀 16,209評(píng)論 1 3
  • 一步步帶你實(shí)現(xiàn)web全景看房——three.js canvas畫(huà)2d相信大家都很熟悉了,但3d世界更加炫酷。我們直...
    Jiao_0805閱讀 753評(píng)論 0 0
  • threejs官網(wǎng) 三維場(chǎng)景基本要素: 場(chǎng)景(Scene):模型、燈光等 相機(jī)(Camera):觀察場(chǎng)景的視角 渲...
    樂(lè)伊兔閱讀 263評(píng)論 0 0
  • Three.js是一個(gè)偉大的開(kāi)源WebGL庫(kù),WebGL允許JavaScript操作GPU,在瀏覽器端實(shí)現(xiàn)真正意義...
    無(wú)言以越閱讀 3,096評(píng)論 3 19

友情鏈接更多精彩內(nèi)容