1. 程式人生 > >WebGL之Three.js開發第一個場景(含原始碼)

WebGL之Three.js開發第一個場景(含原始碼)

在h5火熱的當下,各種絢麗的場景層出不窮。但是,我們是不是發現大部分或者說絕大部分的網站只是一個向用戶展示資訊的平臺。至於使用者與其進行的互動則僅限於下拉瀏覽,點選觸發,或者填寫一些表單資訊。

我一直在思考下一個web時代,並不敢斷言一定會是WebGL,但是在不久後的幾年中,使用者在瀏覽網站時所能進行的互動將會越來越多,一種類似於遊戲的渲染將會更多的應用在Web開發中。

下面是我對WebGL的第三方庫Three.js的學習心得,如有不足還望諒解。非常希望您能提出寶貴意見。

開始學習:)

1、引入Three.js

在進行開發之前,我們要要引入開發所必須的庫檔案three.js。這個建議在

官網上下載。建議直接左側download,裡面包含的其他js檔案將在後期還會有用。下載完成後,我們便需要引入js檔案。下面是引入three.js檔案的程式碼展示。

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8>
    <title>My first three.js app</title>
    <style>
        body { margin: 0; }
        canvas { width: 100%; height: 100% }
    </style>
</head>
<body>
    <script src="js/three.js"></script>
    <script>
        // Our Javascript will go here.
    </script>
</body>
</html>

2.建立場景

場景的建立同Scene物件,他是設定由three.js呈現的內容的位置,是我們放置燈光,物體和照相機的地方。

var scene = new THREE.Scene();//使用場景

3.建立相機

下面的語句表示的是建立一個透視相機,什麼是透視相機為了讓顯示的更像3維的效果。透視相機在現實的 時候會根據距離的遠近來顯示場景,離的近會顯示大,離的遠會顯示的小。其實就像我們眼睛一眼,離的近所能看見的物品少,離的遠就能看見較多的物品。

PerspectiveCamera( fov, aspect, near, far )有三個四個引數,分別是仰角,長寬比 近裁剪面 遠裁剪面。

var camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,1,1000);

4.渲染

使用WebGL來渲染場景。WebGLRenderer含有引數,在定義引數中可以將場景渲染於特定的canvas中,不寫引數時為預設值。

var renderer = new THREE.WebGLRenderer();//渲染
renderer.setSize( window.innerWidth, window.innerHeight );//設定顯示的效果  如果需要顯示很少的解析度的話   可以設定更小的高度的寬度 
document.body.appendChild( renderer.domElement );//渲染元素到body中顯示 

5.建立一個geometry幾何體

BoxGeometry能夠建立一個box。其中的三個引數分別表示長寬高。
MeshBasicMaterial 表示用最簡單的方式來繪製幾何體。其中color是設定幾何體的顏色。
Mesh函式呼叫geometry,和material來構造出幾何體。
最後將我們所畫的正方體新增在場景中。

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 );

6.渲染顯示

在我們建立了場景、照相機、和渲染的物件,並且我們還建立了一個幾何體新增在場景中時,我們還不能顯示出來這個正方形的幾何體。建立的場景是需要渲染的。

renderer.render( scene, camera );   //渲染場景和攝像機

7.完整程式碼展示。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>the first three.js </title>
    <style>
        body { margin: 0;}
        canvas { width: 100%; height: 100%;}
    </style>
</head>
<body>
    <script src="../js/three.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;

        function animate() {
            requestAnimationFrame( animate ); 
            renderer.render( scene, camera );
            cube.rotation.x += 0.05;  
            cube.rotation.y += 0.05;
        }
        animate();
    </script>

</body>

相關推薦

WebGLThree.js開發第一場景原始碼

在h5火熱的當下,各種絢麗的場景層出不窮。但是,我們是不是發現大部分或者說絕大部分的網站只是一個向用戶展示資訊的平臺。至於使用者與其進行的互動則僅限於下拉瀏覽,點選觸發,或者填寫一些表單資訊。 我一直在思考下一個web時代,並不敢斷言一定會是WebGL,但是在

webGLthree.js入門3--材料篇

gmat 深度 官網 像素 face 得到 hba 根據 線框 這幾天在看李鵬程翻譯的[美]Jos Dirksen的《Three.js開發指南》,看到第八章了,現在來總結一下threejs中材料的相關知識。順帶也看完了上海交大的張雯莉出的《threejs入門指南》,我所學所

webGLthree.js入門4--ThreeJS Editor入門篇

希望 con 設計 loader 相關 clas cal 其他 bar 因為工作需要,要看threejs editor的源碼,順便記錄過程。 github下載的源碼目錄是這樣的 但是editor和其他文件夾內的內容的關聯的,我需要將其獨立出來並且編輯editor。 進入e

three.js入門第一案例

準備工作 1.運用three.js進行3d開發,其實和頁面程式設計一樣,首先需要在html檔案中引入three.js。Three.js使用面向物件的方式來構建程式,它包含3個基本物件: 場景(scene), 相機(camera), 以及一個渲染器(renderer)。 第一步: 引入three.js.

[BZOJ2844]albus就是要第一出場線性基

Address 洛谷 P4869 BZOJ 2844 Solution 本題只不過是考查對線性基的理解 先介紹下一個顯然的結論 如果 n

.NET Core單元測試搞死開發的覆蓋率統計coverlet + ReportGenerator

.... 更新 and enc team port ide git 微軟 .NET Core單元測試之搞死開發的覆蓋率統計 這兩天在給項目補單元測試,dalao們要求要看一下測試覆蓋率 翻了一波官方test命令覆蓋率倒是有支持了,然而某個更新日誌裏面寫著 【“Suppor

安迪的第一字典UVa 10815

【問題描述】輸入一個文字,找出所有不同的單詞(連續的字母序列),按字典序從小到大輸出。單詞不區分大小寫。 【樣例輸入】 Adventures in Disneyland Two blondes were going to Disneyland when they

使用高德地圖微信小程式SDK開發案例-輸入提示原始碼

閒來無事寫一篇使用高德地圖的微信小程式SDK開發應用的例項。 接下來先看需求: 我們要做的是,根據使用者輸入的關鍵詞,給出相應的提示資訊,列表中顯示地方的名稱,地方的詳細地址以及對應的經緯度座標。 當然在UI上我們儘量做到理想的視覺與較好的使用者體驗。 最終的效果我們希望是像這樣的,

動態規劃最長單調遞增子序列C++原始碼

動態規劃之最長單調遞增子序列 問題: L={a1,a2,a3,…,an}既L是由n個不同的實陣列成的序列,求L的最長單調遞增子序列(下標可不連續)。 分析: 設輔助陣列b,b[i]表示以a[i]為結尾的最長遞增子序列的長度,最長遞增子序列的長度,就是陣列b的最大

Activity生命週期互動設計思想和應用場景原始碼

Activity生命週期互動設計思想 1.在多個Activity進行互動的時候,為什麼要先暫停(onPause()方法)當前的Activity,執行新的Activity的onCreate()方法,onStart()方法,onResume()方法? 答:比

小程式開發快速入門教程原始碼

五分鐘上手-微信小程式image我們可以在選單 “設定”-“開發設定” 看到小程式的 AppID 了 。小程式的 AppID 相當於小程式平臺的一個身份證,後續你會在很多地方要用到 AppID (注意這裡要區別於服務號或訂閱號的 AppID)。有了小程式帳號之後,我們需要一個工具來開發

SpringBoot進階統一異常處理原始碼

淺談異常處理 在J2EE專案的開發中,不管是對底層的資料庫操作過程,還是業務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統的程式碼耦合度高,工作量大且不好統一,維護的工作量也很大。

SpringBoot進階訪問資料庫原始碼

本文介紹在Spring Boot基礎下配置資料來源和通過JdbcTemplate編寫資料訪問的示例。 簡單介紹一下 @Controller:修飾class,用來建立處理http請求的物件 @RestController:Spring4之後加入的註解,原來在

wireshark外掛開發詳細流程原始碼

相關學習資料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/Instant_Messaging_and_Presence_Protocol https:/

01-THREE.JS第一場景

添加 width ear scene mode lan oot itl set THREE.JS第一個場景 <!DOCTYPE html> <html> <head> <meta charset="UTF-

使用WebGL + Three.js制作動畫場景

http hang log orm monitor 放置 tor mes quest 使用WebGL + Three.js制作動畫場景 3D圖像,技術,打造產品,還有互聯網:這些只是我愛好的一小部分。 現在,感謝WebGL的出現-一個新的JavaScriptAPI,它可以

Webgl基於Three.js開發——利用Frustum來判斷相交或者包含

首先來看一下Frustum的文件:Frustum幫助文件 根據文件建立一個Frustum: function initFrustum() { //定義錐形物體最遠的四個點 var topLeftPoint = new THREE

一、WCF學習旅-創建第一服務

img image pub 頁面 添加服務 ets art idt null WCF基本介紹:http://baike.baidu.com/link?url=TGjLYt3HS4dt4-hIiGRknLy6udRsZ52QxJz9cmRKlR4NXbP9rCZDsKn2fD

用UNITY5開發第一手機遊戲(1)各種插件的準備

插件 amp nvt ef6 手機遊戲 開發 fan dnv arc GPUGEMS%E2%80%94%E2%80%94%E7%AC%AC23%E7%AB%A0%E5%A4%B4%E5%8F%91%E5%8A%A8%E7%94%BB%E5%92%8C%E6%B8%B2%E6

JEECG開發第一菜單現實設備列表

一個 varchar ava list fit name ngs 設備 編碼 一、新建設備表(t_base_device) SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table struct