three.js 學(xué)習(xí)

Three.js 是一個(gè) 3D JavaScript 庫(kù)
首先認(rèn)識(shí)下關(guān)鍵字

  • 渲染器(Renderer)
  • 場(chǎng)景(Scene)
  • 照相機(jī)(Camera)
  • 網(wǎng)格 (Mesh)

常用的渲染器有:WebGLRenderer和CanvasRenderer
WebGL渲染效果贸呢、性能逗比CanvasRenderer 好
CanvasRenderer則具有更好的兼容性闷供。

添加的物體都添加到場(chǎng)景(Scene)中

1.照相機(jī)(Camera)

  • 正交投影照相機(jī)(Orthographic Camera)
  • 透視投影照相機(jī)(Perspective Camera)


    image.png
  1. 正交投影照相機(jī) (Orthographic Camera)
    不會(huì)改變物體的比例
THREE.OrthographicCamera(left, right, top, bottom, near, far)
image.png

2.透視投影照相機(jī)(Perspective Camera)的構(gòu)造函數(shù)是:

THREE.PerspectiveCamera(fov, aspect, near, far)
image.png

aspect等于width / height
near和far分別是照相機(jī)到視景體最近隶糕、最遠(yuǎn)的距離届宠,均為正值

2.幾何形狀

2.1幾何形狀(Geometry)

材質(zhì)(Material)

  • 立方體
THREE.CubeGeometry(width, height, depth, widthSegments, heightSegments, depthSegments)
  • 平面
THREE.PlaneGeometry(width, height, widthSegments, heightSegments)
  • 球體
THREE.SphereGeometry(radius, segmentsWidth, segmentsHeight, phiStart, phiLength, thetaStart, thetaLength)

// radius是半徑狐胎;segmentsWidth表示經(jīng)度上的切片數(shù);
// segmentsHeight表示緯度上的切片數(shù)跟匆;phiStart表示經(jīng)度開(kāi)始的弧度甜害;
// phiLength表示經(jīng)度跨過(guò)的弧度;thetaStart表示緯度開(kāi)始的弧度卑硫;
// thetaLength表示緯度跨過(guò)的弧度徒恋。

segmentsWidth相當(dāng)于經(jīng)度被切成了幾瓣,而segmentsHeight相當(dāng)于緯度被切成了幾層

  • 圓形(CircleGeometry)可以創(chuàng)建圓形或者扇形欢伏,其構(gòu)造函數(shù)是:
THREE.CircleGeometry(radius, segments, thetaStart, thetaLength)
  • 圓柱體(CylinderGeometry)的構(gòu)造函數(shù)是:
THREE.CylinderGeometry(radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded)
//radiusTop與radiusBottom分別是頂面和底面的半徑
//radiusSegments與heightSegments可類(lèi)比球體中的分段入挣;
//openEnded 缺省值為false,表示有頂面和底面硝拧。true為無(wú)
  • 正四面體径筏、正八面體、正二十面體
THREE.TetrahedronGeometry(radius, detail)
THREE.OctahedronGeometry(radius, detail)
THREE.IcosahedronGeometry(radius, detail)
  • 圓環(huán)面(TorusGeometry)
THREE.TorusGeometry(radius, tube, radialSegments, tubularSegments, arc)
//radius是圓環(huán)半徑障陶;tube是管道半徑滋恬;
//radialSegments與tubularSegments分別是兩個(gè)分段數(shù),
//arc是圓環(huán)面的弧度抱究,缺省值為Math.PI * 2恢氯。
image.png
  • 圓環(huán)結(jié)(TorusKnotGeometry)
THREE.TorusKnotGeometry(radius, tube, radialSegments, tubularSegments, p, q, heightScale)
//heightScale是在z軸方向上的縮放。
2.2 文字形狀
THREE.TextGeometry(text, parameters)

parameters 參數(shù)設(shè)置

  • size:字號(hào)大小鼓寺,一般為大寫(xiě)字母的高度
  • height:文字的厚度
  • curveSegments:弧線(xiàn)分段數(shù)勋拟,使得文字的曲線(xiàn)更加光滑
  • font:字體,默認(rèn)是'helvetiker'妈候,需對(duì)應(yīng)引用的字體文件
  • weight:值為'normal'或'bold'敢靡,表示是否加粗
  • style:值為'normal'或'italics',表示是否斜體
  • bevelEnabled:布爾值苦银,是否使用倒角啸胧,意為在邊緣處斜切
  • bevelThickness:倒角厚度
  • bevelSize:倒角寬度
2.3 自定義形狀
THREE.Geometry()

3.材質(zhì)

通過(guò)設(shè)置材質(zhì)可以改變物體的顏色赶站、紋理貼圖、光照模式等

3.1 基本材質(zhì)
THREE.MeshBasicMaterial(opt)
  • visible:是否可見(jiàn)吓揪,默認(rèn)為true
  • side:渲染面片正面或是反面亲怠,默認(rèn)為正面THREE.FrontSide,可設(shè)置為反面THREE.BackSide柠辞,或雙面THREE.DoubleSide
  • wireframe:是否渲染線(xiàn)而非面,默認(rèn)為false
  • color:十六進(jìn)制RGB顏色主胧,如紅色表示為0xff0000
  • map:使用紋理貼圖
3.2 Lambert材質(zhì)

只考慮漫反射而不考慮鏡面反射的效果

 THREE.MeshLambertMaterial(opt)
3.3 Phong材質(zhì)

Phong 模型考慮了鏡面反射的效果叭首,因此對(duì)于金屬、鏡面的表現(xiàn)尤為適合

 THREE.MeshPhongMaterial(opt)
3.4 法向材質(zhì)
 THREE.MeshNormalMaterial(opt)

4.網(wǎng)格

網(wǎng)格是由頂點(diǎn)踪栋、邊焙格、面等組成的物體

Mesh(geometry, material)

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

每秒幀數(shù) FPS(Frames Per Second),是指每秒畫(huà)
面重繪的次數(shù)夷都。FPS 越大眷唉,則動(dòng)畫(huà)效果越平滑
常用方法:

setInterval(func, msec)
requestAnimationFrame

6.外部模型

7.光與影

7.1環(huán)境光

環(huán)境光沒(méi)有明確的光源位置,在各處形成的亮度也是一致的囤官。

THREE.AmbientLight(hex)

環(huán)境光通常使用白色或者灰色冬阳,作為整體光照的基礎(chǔ)。

7.2 點(diǎn)光源
THREE.PointLight(hex, intensity, distance)
7.3平行光
THREE.DirectionalLight(hex, intensity)
7.4聚光燈
THREE.SpotLight(hex, intensity, distance, angle, exponent)
//angle是聚光燈的張角党饮,缺省值是Math.PI / 3肝陪,最大值是Math.PI / 2;
//exponent是光強(qiáng)在偏離target的衰減指數(shù)(target需要在之后定義刑顺,缺省值為(0, 0, 0))氯窍,缺省值是10。

學(xué)習(xí)從搬運(yùn)開(kāi)始

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹲堂,一起剝皮案震驚了整個(gè)濱河市狼讨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柒竞,老刑警劉巖政供,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異能犯,居然都是意外死亡鲫骗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)踩晶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)执泰,“玉大人,你說(shuō)我怎么就攤上這事渡蜻∈趿撸” “怎么了计济?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)排苍。 經(jīng)常有香客問(wèn)我沦寂,道長(zhǎng),這世上最難降的妖魔是什么淘衙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任传藏,我火速辦了婚禮,結(jié)果婚禮上彤守,老公的妹妹穿的比我還像新娘毯侦。我一直安慰自己,他們只是感情好具垫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侈离。 她就那樣靜靜地躺著,像睡著了一般筝蚕。 火紅的嫁衣襯著肌膚如雪卦碾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天起宽,我揣著相機(jī)與錄音洲胖,去河邊找鬼。 笑死燎含,一個(gè)胖子當(dāng)著我的面吹牛宾濒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屏箍,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绘梦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赴魁?” 一聲冷哼從身側(cè)響起卸奉,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颖御,沒(méi)想到半個(gè)月后榄棵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潘拱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年疹鳄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芦岂。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘪弓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出禽最,到底是詐尸還是另有隱情腺怯,我是刑警寧澤袱饭,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呛占,受9級(jí)特大地震影響虑乖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晾虑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一疹味、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧走贪,春花似錦佛猛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遂跟。三九已至逃沿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幻锁,已是汗流浹背凯亮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哄尔,地道東北人假消。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岭接,于是被迫代替她去往敵國(guó)和親富拗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 本文主要是講解 Three.js 的相關(guān)概念鸣戴,幫助大家對(duì) Three.js 以及相關(guān)知識(shí)形成比較完整的理解啃沪。今年來(lái)...
    Simon王小白閱讀 8,455評(píng)論 2 9
  • 之前用qunee做了一個(gè)2.5d的機(jī)房監(jiān)控,丑的閃瞎我的卡姿蘭大眼窄锅,后來(lái)含淚用three.js做個(gè)3d的換...
    我得有妖氣閱讀 1,593評(píng)論 1 2
  • 什么是照相機(jī)创千? 我們使用Three.js創(chuàng)建的場(chǎng)景是三維的,而通常情況下顯示屏是二維的入偷,那么三維的場(chǎng)景如何顯示到二...
    謝大見(jiàn)閱讀 6,083評(píng)論 0 1
  • 在開(kāi)始談 WebVR 前追驴,我們先來(lái)看看人眼中的三維立體是如何產(chǎn)生的。 外部世界是三維立體的疏之,但是它在我們的視網(wǎng)膜上...
    點(diǎn)融黑幫閱讀 11,074評(píng)論 4 6
  • 前兩天我和一位同事溝通某項(xiàng)工作殿雪,結(jié)果我說(shuō)了半天他才明白,我都累到無(wú)力了体捏。 隨后一位了解他的同事...
    瞳小甜Rosie閱讀 211評(píng)論 0 0