標籤

2016年6月25日 星期六

Three.js 範例教學 (一) 環境設定

前言:

在本篇章之中,我會介紹大家一些WebGL以及一些3D物件上的基礎知識以及實際寫一個基礎DEMO程式。




一. WebGL   :


            WebGL 是基於openGL ES2.0下的演示引擎,並且可透過 HTML5 的 Canvas元素當作DOM的訪問接口。


二. Three.js:


Three.js是一個3D javaScript 引擎base on  WebGL的,使用他的好處是有現成強大的元件功能,即便遇到了three.js沒有現成元件,開發者也能透過WebGL引擎建立,且兩者之間不會有衝突。

官方網站上有許多的範例,有興趣的朋友可以點以下連結

http://threejs.org/




三.環境設定:如果您的環境已經設定好了可以跳過此步驟

1.下載 https://github.com/mrdoob/three.js/tree/master/build解壓縮後會得到兩個lib檔案three.jsthree.min.js,前者適用於開發階段,後者為壓縮檔適用於發佈後使用。

如果你覺得很麻煩也可以透過CDN import three.js lib:

<script src="http://threejs.org/build/three.min.js"></script> 



四.主程式撰寫:

一個完整的Three.js專案中必定會有(如果有開發其他平台下的OpenGL專案,其邏輯是一樣的):

1.渲染器:Renderer
2.攝影機:Camera
3.場景:Scene
4.場景內的物體:Content (ex. cube 、sphere、custom object等)

如果當專案run起來沒看到東西可以從這四個方向下手 Debug。
程式碼:




<!DOCTYPE html>
<html>
<head>
    <title>Hello Three.js</title>
    <div id="area"></div> <!--宣告一個3D Scene在網頁內的範圍-->
    <script src="http://threejs.org/build/three.min.js"></script><!-- 引用 three.js lib-->

</head>
<body>
    <script>

        var area = document.getElementById('area');//指定一個變數
        
        var width  = window.innerWidth,// 取得 視窗的寬與高
      height = window.innerHeight;

        var scene = new THREE.Scene(); //宣告場景

        var renderer = new THREE.WebGLRenderer(); //宣告一個渲染器
renderer.setSize(width, height);
        
        //宣告攝影機並設定位置,在此使用透視相機其原理會在後面章節講解
        var camera = new THREE.PerspectiveCamera(45, width / height, 1, 800);
        camera.position.set(0, 0, 5);

        //宣告一個  Cube的幾何圖形
        var cube = new THREE.Mesh(new THREE.CubeGeometry(2, 2, 2),
                        new THREE.MeshBasicMaterial({
                            color: 0xff0000
                        })
                );
        
        scene.add(camera); //場景加載camera
        scene.add(cube);   //場景加載 content ( 此範例是宣告一個 cube的幾何物件)
        renderer.render( scene , camera );
        area.appendChild(renderer.domElement);   
        
    
    </script>

</body>
</html>

秀出結果:





下一篇 我們來實作添加動畫的 3D Project


沒有留言:

張貼留言