Three.js基礎(chǔ)入門(mén)(1)

1.場(chǎng)景

場(chǎng)景是three.js最基礎(chǔ)的三大要素之一,你的所有要展示的內(nèi)容都在場(chǎng)景之中,創(chuàng)建的方式十分簡(jiǎn)單var scene = new Scene() 就可以創(chuàng)建場(chǎng)景對(duì)象

2.相機(jī)

相機(jī)是three.js最基礎(chǔ)的三大要素之二缕探,我們做的是一個(gè)3D的視圖所以需要一個(gè)從一個(gè)?角度去觀察物體骗绕,var camera = THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000)這樣就可以創(chuàng)建一個(gè)最常用的相機(jī)维苔,第一個(gè)參數(shù)是觀察視角的角度宵荒,第二個(gè)是觀察場(chǎng)景比例,第三徘意,四個(gè)是近景距離遠(yuǎn)景距離苔悦。代表的是觀察者的角色

3.渲染器

渲染器是three.js最基礎(chǔ)的三大要素之二,是three.js用來(lái)渲染圖形的引擎椎咧,three.js最基礎(chǔ)的三大要素之二玖详,我們做的是一個(gè)3D的視圖所以需要一個(gè)從一個(gè)?角度去觀察物體。

var renderer = new THREE.WebGLRenderer()
renderer.setClearColor(0xEEEEEE)
renderer.setSize(window.innerWidth, window.innerHeight)

我們可以通過(guò)api來(lái)控制渲染視圖的顏色和尺寸

4.坐標(biāo)系

采用的是右手坐標(biāo)系來(lái)建立模型勤讽,為了方便理解我們可以創(chuàng)建坐標(biāo)系來(lái)幫助我們開(kāi)發(fā)var axes=new THREE.AxisHelper(20); scene.add(axes)傳入的值是坐標(biāo)系的長(zhǎng)度蟋座,把坐標(biāo)系加入場(chǎng)景才會(huì)生效

5.物體

我們的圖形都是由各種物體拼接在一起組成的,three.js為我們提供了幾種基本的圖形,簡(jiǎn)單說(shuō)幾個(gè)

模型及材料

每個(gè)物體都是由模型和材料組成的每個(gè)物體都有一個(gè)定義模型的方法脚牍,模型決定物體的形狀向臀,材料決定的顏色,紋理等

1.平面
var planeGeo = new THREE.PlaneGeometry(60,20)
var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc})
var plane = new THREE.Mesh(planeGeo, planeMaterial)

THREE.PlaneGeometry創(chuàng)建一個(gè)基本的平面诸狭,THREE.MeshBasicMaterial創(chuàng)建一個(gè)基本的材料在這里我們只添加顏色券膀,然后把材料和模型合成到一起組成平面

2.長(zhǎng)方體
var cubeGeo = new THREE.CubeGeometry(4,4,4)
var cubeMaterial = new THREE.MeshLambertMaterial({color: 0xff0000})
var cube = new THREE.Mesh(cubeGeo, cubeMaterial)

THREE.CubeGeometry創(chuàng)建一個(gè)長(zhǎng)方體三個(gè)參數(shù)分別代表x,y,z軸的長(zhǎng)度其他方法同上

3.球體
var spGeo = new THREE.SphereGeometry(4, 20, 20)
var spMa = new THREE.MeshLambertMaterial({color: 0x7777ff})
var sp = new THREE.Mesh(spGeo, spMa)

6.渲染

我們定義好了物體需要把物體添加到場(chǎng)景中,scene.add(plane)依次把物體添加到場(chǎng)景中驯遇,然后我們調(diào)用renderer.render(scene, camera)把圖形渲染好最后芹彬,我們把圖形添加到dom元素中,創(chuàng)建一個(gè)空的div標(biāo)簽id為webdocument.getElementById('web').appendChild(renderer.domElement)叉庐,

7.位置

我們默認(rèn)的物體都會(huì)渲染在原點(diǎn)上舒帮,我們需要把物體畫(huà)在我們想要的位置上,我們先來(lái)旋轉(zhuǎn)一下平面plane.rotation.x = -0.5*Math.PI將平面旋轉(zhuǎn)90度
plane.position.x = 15將平面在x軸方向上移動(dòng)15,相應(yīng)的處理下長(zhǎng)方體和球體陡叠,還差一個(gè)相機(jī)的位置的位置玩郊,如果不設(shè)置我們會(huì)什么都看不到,設(shè)置一個(gè)坐標(biāo)決定我們是在哪個(gè)角度看

cube.position.x = -4
cube.position.y = 2
cube.position.z = 2
sp.position.x = 20
sp.position.y = 4
sp.position.z = 2
camera.position.x = -30
camera.position.y = 40
camera.position.z = 30
camera.lookAt(scene.position)
1.png

現(xiàn)在我們會(huì)看到如上圖的效果

8.光源

three.js我們可以通過(guò)api來(lái)控制光枉阵,來(lái)我們可以控制光的顏色和光的角度译红,為了性能,默認(rèn)是不顯示陰影的所以我們要開(kāi)啟陰影效果,renderer.shadowMap.enabled = true岭妖,我們之前使用的材料apiTHREE.MeshBasicMaterial是不會(huì)產(chǎn)生陰影的临庇,所以長(zhǎng)方體和球體我們采用THREE.MeshLambertMaterial,需要反射光的物體需要通過(guò)api開(kāi)啟陰影

plane.receiveShadow = true
cube.castShadow = true
sp.castShadow = true

這樣我們就會(huì)看到圖形上的陰影

9.動(dòng)畫(huà)

three.js中我們調(diào)用webGl專(zhuān)門(mén)的api來(lái)重新渲染昵慌,效率比setInterval高假夺,直接看代碼

  function renderScene(){
    stats.update()
    cube.rotation.x += 0.03
    step += 0.03
    requestAnimationFrame(renderScene)
    sp.position.x = 20 + (10*Math.cos(step))
    sp.position.y = 2 + (10*Math.abs(Math.sin(step)))
    renderer.render(scene, camera)
  }
  renderScene()

這樣就會(huì)看到長(zhǎng)方體繞著x軸轉(zhuǎn)動(dòng),球體在做拋物線(xiàn)來(lái)回運(yùn)動(dòng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斋攀,一起剝皮案震驚了整個(gè)濱河市已卷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淳蔼,老刑警劉巖侧蘸,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裁眯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讳癌,警方通過(guò)查閱死者的電腦和手機(jī)穿稳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晌坤,“玉大人逢艘,你說(shuō)我怎么就攤上這事≈璨ぃ” “怎么了它改?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)商乎。 經(jīng)常有香客問(wèn)我央拖,道長(zhǎng),這世上最難降的妖魔是什么鹉戚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任鲜戒,我火速辦了婚禮,結(jié)果婚禮上抹凳,老公的妹妹穿的比我還像新娘袍啡。我一直安慰自己,他們只是感情好却桶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蔗牡,像睡著了一般颖系。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辩越,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天嘁扼,我揣著相機(jī)與錄音,去河邊找鬼黔攒。 笑死趁啸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的督惰。 我是一名探鬼主播不傅,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赏胚!你這毒婦竟也來(lái)了访娶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤觉阅,失蹤者是張志新(化名)和其女友劉穎崖疤,沒(méi)想到半個(gè)月后秘车,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劫哼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年叮趴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片权烧。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眯亦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豪嚎,到底是詐尸還是另有隱情搔驼,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布侈询,位于F島的核電站舌涨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扔字。R本人自食惡果不足惜囊嘉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望革为。 院中可真熱鬧扭粱,春花似錦、人聲如沸震檩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抛虏。三九已至博其,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迂猴,已是汗流浹背慕淡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沸毁,地道東北人峰髓。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像息尺,于是被迫代替她去往敵國(guó)和親携兵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容