three.js簡介 —— 3D框架

隨着HTML5的普及,網頁的表現能力越來越強大,瀏覽器提供了WebGL接口,可以通過調用對應API進行3D圖形的繪製,Three.js在這些基礎接口之上又做了一層封裝。
threejs

原文鏈接

特點

Three.js特點:
* 掩蓋了3D渲染細節
* 面向對象
* 功能豐富
* 速度快
* 支持交互
* 內置文件支持
* 拓展性強
* 同時支持HTML5、2D、Canvas

動畫示例

threejs動畫

簡介

本文通過three.js中基礎的場景實現簡單瞭解一下

引入

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

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

創建場景

爲了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
第一個參數是視野。是在任何給定時刻在顯示器上看到的場景的範圍,以度爲單位。
第二個是寬高比。最好使用元素的寬度除以高度,不然圖像看起來很凹陷。
接下來的兩個屬性是近端和遠端剪切平面。如果對象遠離相機比的數值,遠或近於附近將不會被渲染。

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

4、除了創建渲染器實例外,還需要設置渲染應用程序的大小。可以設置成瀏覽器窗口的寬度和高度。但對於性能密集型場景,可以用setSize設置較小的值,如window.innerWidth/2和window.innerHeight/2,使應用程序呈現一半的大小。
如果想保持應用程序的大小,以較低的分辨率渲染它,可以通過以false第三個參數來調用setSize。例如,setSize(window.innerWidth/2,window.innerHeight/2,false),將以一半分辨率呈現應用程序。

添加立方體

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創建一個多維數據集,包含數據集中的點(頂點)和麪的對象。

2、接着是進行上色,three.js中有幾種材料,可以使用MeshBasicMaterial方法。

3、創建一個網格對象Mesh,帶入之前創建的幾何體和材質,然後添加到場景中。默認情況下,調用scene.add(),添加的東西會被顯示到座標(0,0,0)。會導致相機和立方體在彼此內部。爲了避免這種情況,只需將攝像頭移出一點。

渲染場景

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>

總結

根據Threejs官方示例簡單瞭解一下threejs概念和基礎佈局場景,通過提供的api可以繪製出有趣的場景,實現複雜的動畫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章