three.js簡介 —— 3D框架

threejs

隨著HTML5的普及赦拘,網(wǎng)頁的表現(xiàn)能力越來越強大,瀏覽器提供了WebGL接口马靠,可以通過調(diào)用對應API進行3D圖形的繪制,Three.js在這些基礎接口之上又做了一層封裝对室。

原文鏈接

特點

Three.js特點:

  • 掩蓋了3D渲染細節(jié)
  • 面向?qū)ο?/li>
  • 功能豐富
  • 速度快
  • 支持交互
  • 內(nèi)置文件支持
  • 拓展性強
  • 同時支持HTML5隧甚、2D、Canvas

動畫示例

threejs動畫

簡介

本文通過three.js中基礎的場景實現(xiàn)簡單了解一下

引入

首先需要引入three.js庫文件峦树,可以下載到本地或直接引用線上地址辣辫。

 <script src='http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js'></script>

創(chuàng)建場景

為了three.js顯示,需要三件事情:場景魁巩、相機和渲染器

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

1急灭、先建立一塊場景。

2谷遂、在three.js中有不同的相機葬馋,上面使用的是PerspectiveCamera
第一個參數(shù)是視野。是在任何給定時刻在顯示器上看到的場景的范圍肾扰,以度為單位畴嘶。
第二個是寬高比。最好使用元素的寬度除以高度集晚,不然圖像看起來很凹陷窗悯。
接下來的兩個屬性是近端和遠端剪切平面。如果對象遠離相機比的數(shù)值偷拔,遠或近于附近將不會被渲染蒋院。

3、接下來是渲染器莲绰。除了使用的WebGLRenderer之外欺旧,three.js還帶有一些其他的功能,通常用于舊版瀏覽器或者因為某些原因沒有WebGL支持的用戶蛤签。

4切端、除了創(chuàng)建渲染器實例外,還需要設置渲染應用程序的大小顷啼√ぴ妫可以設置成瀏覽器窗口的寬度和高度。但對于性能密集型場景钙蒙,可以用setSize設置較小的值茵瀑,如window.innerWidth/2和window.innerHeight/2,使應用程序呈現(xiàn)一半的大小躬厌。
如果想保持應用程序的大小马昨,以較低的分辨率渲染它竞帽,可以通過以false第三個參數(shù)來調(diào)用setSize。例如鸿捧,setSize(window.innerWidth/2,window.innerHeight/2,false)屹篓,將以一半分辨率呈現(xiàn)應用程序。

添加立方體

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

1匙奴、使用BoxGeometry創(chuàng)建一個多維數(shù)據(jù)集堆巧,包含數(shù)據(jù)集中的點(頂點)和面的對象。

2泼菌、接著是進行上色谍肤,three.js中有幾種材料,可以使用MeshBasicMaterial方法哗伯。

3荒揣、創(chuàng)建一個網(wǎng)格對象Mesh,帶入之前創(chuàng)建的幾何體和材質(zhì)焊刹,然后添加到場景中系任。默認情況下,調(diào)用scene.add()虐块,添加的東西會被顯示到坐標(0,0,0)赋除。會導致相機和立方體在彼此內(nèi)部。為了避免這種情況非凌,只需將攝像頭移出一點举农。

渲染場景

function animate() {
    requestAnimationFrame( animate );
    renderer.render( scene, camera );
}
animate();

利用requestAnimationFrame在刷新屏幕時不斷渲染場景。

動起來

cube.rotation.x += 0.1;
cube.rotation.y += 0.1;

在場景刷新時修改一些立方體屬性敞嗡,使其運動颁糟。

代碼

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>first three.js</title>
        <style>
            body { margin: 0; }
            canvas { width: 100%; height: 100% }
        </style>
    </head>
    <body>
        <script src='http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js'></script>

        <script>
            var scene = new THREE.Scene();
            var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize( window.innerWidth, window.innerHeight );
            document.body.appendChild( renderer.domElement );

            var geometry = new THREE.BoxGeometry( 1, 1, 1 );
            var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
            var cube = new THREE.Mesh( geometry, material );
            scene.add( cube );

            camera.position.z = 5;

            var animate = function () {
                requestAnimationFrame( animate );

                cube.rotation.x += 0.1;
                cube.rotation.y += 0.1;

                renderer.render(scene, camera);
            };

            animate();
        </script>
    </body>
</html>

總結(jié)

根據(jù)Threejs官方示例簡單了解一下threejs概念和基礎布局場景,通過提供的api可以繪制出有趣的場景喉悴,實現(xiàn)復雜的動畫棱貌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箕肃,隨后出現(xiàn)的幾起案子婚脱,更是在濱河造成了極大的恐慌,老刑警劉巖勺像,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件障贸,死亡現(xiàn)場離奇詭異,居然都是意外死亡吟宦,警方通過查閱死者的電腦和手機篮洁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殃姓,“玉大人袁波,你說我怎么就攤上這事瓦阐。” “怎么了篷牌?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵睡蟋,是天一觀的道長熟史。 經(jīng)常有香客問我芳室,道長闷游,這世上最難降的妖魔是什么创千? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮久锥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己听诸,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布蚕泽。 她就那樣靜靜地躺著晌梨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪须妻。 梳的紋絲不亂的頭發(fā)上仔蝌,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音荒吏,去河邊找鬼敛惊。 笑死,一個胖子當著我的面吹牛绰更,可吹牛的內(nèi)容都是我干的瞧挤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼儡湾,長吁一口氣:“原來是場噩夢啊……” “哼特恬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徐钠,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤癌刽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尝丐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體显拜,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年爹袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了讼油。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡呢簸,死狀恐怖矮台,靈堂內(nèi)的尸體忽然破棺而出乏屯,到底是詐尸還是另有隱情,我是刑警寧澤瘦赫,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布辰晕,位于F島的核電站,受9級特大地震影響确虱,放射性物質(zhì)發(fā)生泄漏含友。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一校辩、第九天 我趴在偏房一處隱蔽的房頂上張望窘问。 院中可真熱鬧,春花似錦宜咒、人聲如沸惠赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿咱。三九已至,卻和暖如春场晶,著一層夾襖步出監(jiān)牢的瞬間混埠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工诗轻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钳宪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓扳炬,卻偏偏與公主長得像使套,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞠柄,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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