欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Three.js實現(xiàn)3D機房效果

 更新時間:2018年12月30日 10:44:09   作者:cyadyx  
這篇文章主要為大家詳細介紹了Three.js實現(xiàn)3D機房效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

3D機房系統(tǒng)是最近用戶的需求,通過相關了解最后使用Three.js,也發(fā)現(xiàn)最近有東西可以寫出來分享:

  • webGL可以讓我們在canvas上實現(xiàn)3D效果。而three.js是一款webGL框架,由于其易用性被廣泛應用
  • Three.js是通過對WebGL接口的封裝與簡化而形成的一個易用的圖形庫

分步實現(xiàn)3D效果

  • 初始化3D模型參數(shù)
  • 開始搭建場景
  • 初始化渲染器
  • 初始化攝像機
  • 創(chuàng)建場景
  • 燈光布置
  • 創(chuàng)建網(wǎng)格線
  • 循環(huán)渲染界面
  • 創(chuàng)建鼠標控制器
  • 添加對象到場景中

一 . 初始化3D模型參數(shù)

//參數(shù)處理 
this.option = new Object(); 
this.option.antialias = option.antialias || true; 
this.option.clearCoolr = option.clearCoolr || 0x1b7ace; 
this.option.showHelpGrid = option.showHelpGrid || false; 
//對象 
this.id = id; 
this.width = width(); 
this.height = height(); 
this.renderer = null;//渲染器 
this.scene = null;//場景 
this.camera = null;//攝像機 
this.selected=null; 
this.objects = []; 
this.mouseClick = new THREE.Vector2(); 
this.raycaster = new THREE.Raycaster(); 
this.controls = null;//鼠標控制器 
this.trsnaformControls = null;//鼠標控制器 
this.dragcontrols = null; 
this.objList = json.objects;//對象列表 
this.eventList = json.events;//事件對象列表 
this.dragList = []; 
this.objectStatusList = {}; 
this.clickList = []; 
var that = this;

對于一些需要使用的參數(shù),開始加載進行初始化操作。

二 . 開始搭建場景

搭建場景包含一些具體的初始化操作 一些初始化方法(之后才對具體方法加以說明):

var that = this; 
room3dObj = that; 
that.initThree(that.id); //初始化渲染器 
that.initCamera(); //初始化攝像機 
that.initScene();//創(chuàng)建場景 
that.initHelpGrid();//創(chuàng)建網(wǎng)格 
that.initLight();//燈光布置 
//添加3D對象 
$.each(that.objList, function (index,obj) { 
that.InitAddObject(obj);//添加對象到場景中 
}); 
that.initMouseCtrl();//創(chuàng)建鼠標控制器 
that.animation();//循環(huán)渲染界面

三 . 初始化渲染器

渲染器 WebGLRenderer 定義語法:

var that = this; 
that.renderer = new THREE.WebGLRenderer({ alpha: true, antialias: that.option.antialias }); 
that.renderer.setSize(that.width, that.height); 
$(“#” + that.id).append(that.renderer.domElement); 
that.renderer.setClearColor(that.option.clearCoolr, 1.0); 
that.renderer.shadowMap.enabled = true; 
that.renderer.shadowMapSoft = true; 
//事件 
that.renderer.domElement.addEventListener(‘mousedown',that.onDocumentMouseDown, false); 
that.renderer.domElement.addEventListener(‘mousemove',that.onDocumentMouseMove, false);

四 . 初始化攝像機

采用PerspectiveCamera 相機:

var that = this;
  that.camera = new THREE.PerspectiveCamera(45, that.width / that.height, 1, 100000);
  that.camera.name = 'mainCamera';
  that.camera.position.x =0;
  that.camera.position.y =2000;
  that.camera.position.z =1800;
  that.camera.up.x = 0;
  that.camera.up.y =1;
  that.camera.up.z =0;
  that.camera.lookAt({ x: 100, y: 0, z: 100 });
  that.objects.push(that.camera);
  that.dragList.push(that.camera);
  that.clickList.push(that.camera);

五 . 創(chuàng)建場景

var that = this; 
that.scene = new THREE.Scene();

六 . 燈光布置

/* 
AmbientLight: 環(huán)境光,基礎光源,它的顏色會被加載到整個場景和所有對象的當前顏色上。 
PointLight:點光源,朝著所有方向都發(fā)射光線 
SpotLight :聚光燈光源:類型臺燈,天花板上的吊燈,手電筒等 
DirectionalLight:方向光,又稱無限光,從這個發(fā)出的光源可以看做是平行光. 
*/ 
var that = this; 
var light = new THREE.AmbientLight(0xcccccc); 
light.position.set(0, 0,0); 
that.scene.add(light); 
var light2 = new THREE.PointLight(0x555555); 
light2.shadow.camera.near =1; 
light2.shadow.camera.far = 5000; 
light2.position.set(0, 350, 0); 
light2.castShadow = true;//表示這個光是可以產(chǎn)生陰影的 
that.scene.add(light2);

七 . 創(chuàng)建網(wǎng)格

var that = this; 
if (that.option.showHelpGrid) { 
var helpGrid = new THREE.GridHelper(1000, 50); 
that.scene.add(helpGrid); 
}

八 . 循環(huán)渲染界面

var that = room3dObj; 
if (TWEEN != null && typeof (TWEEN) != ‘undefined') { 
TWEEN.update(); 
} 
requestAnimationFrame(that.animation); 
that.renderer.render(that.scene, that.camera);

九 . 創(chuàng)建鼠標控制器

var that = this; 
that.controls = new THREE.OrbitControls(that.camera,that.renderer.domElement); 
that.controls.addEventListener(‘change', that.updateControls);

十 . 添加對象到場景中

var that = room3dObj; 
that.scene.add(obj); 
that.objects.push(obj);

最后效果


瀏覽器兼容

  • 目前,本編輯器對Chrome瀏覽器支持最為完整。建議大家使用較新版本的Chrome.
  • IE11以下不支持

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • javascript數(shù)組排序匯總

    javascript數(shù)組排序匯總

    本文給大家匯總了一下javascript的數(shù)組排序算法,包括冒泡排序、快速排序、插入排序、希爾排序,希望對大家熟悉javascript數(shù)組排序能夠有所幫助。
    2015-07-07
  • 基于JS+Canves實現(xiàn)點擊按鈕水波紋效果

    基于JS+Canves實現(xiàn)點擊按鈕水波紋效果

    本文給大家分享基于js和canves實現(xiàn)點擊按鈕水波紋效果,效果非常逼真,對此感興趣的朋友一起看看吧
    2016-09-09
  • javascript SocialHistory 檢查訪問者是否訪問過某站點

    javascript SocialHistory 檢查訪問者是否訪問過某站點

    今天delicious上這個名為 SocialHistory 的腳本十分引人注目。源代碼可以在這里下載。這段js代碼的功能就是判斷你的用戶有沒有訪問過某個網(wǎng)站。使用方法很簡單,例如:
    2008-08-08
  • 微信小程序實戰(zhàn)之登錄頁面制作(5)

    微信小程序實戰(zhàn)之登錄頁面制作(5)

    這篇文章主要為大家詳細介紹了微信小程序實戰(zhàn)之登錄頁面制作代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Postman的下載及安裝教程詳解

    Postman的下載及安裝教程詳解

    這篇文章主要介紹了Postman的下載及安裝教程詳解,今天給大家介紹的這款網(wǎng)頁調試工具不僅可以調試簡單的css、html、腳本等簡單的網(wǎng)頁基本信息,它還可以發(fā)送幾乎所有類型的HTTP請求!需要的朋友可以參考下
    2018-10-10
  • js仿微博動態(tài)欄功能

    js仿微博動態(tài)欄功能

    本文主要介紹了js仿微博動態(tài)欄功能的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Javascript控制div屬性動態(tài)變化實例分析

    Javascript控制div屬性動態(tài)變化實例分析

    這篇文章主要介紹了Javascript控制div屬性動態(tài)變化,以實例形式較為詳細的分析了JavaScript響應鼠標事件動態(tài)操作頁面元素屬性的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 詳解axios中封裝使用、攔截特定請求、判斷所有請求加載完畢)

    詳解axios中封裝使用、攔截特定請求、判斷所有請求加載完畢)

    這篇文章主要介紹了axios中封裝使用、攔截特定請求、判斷所有請求加載完畢的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • 微信小程序導入項目后報錯找不到app.json簡單解決辦法

    微信小程序導入項目后報錯找不到app.json簡單解決辦法

    微信小程序的全局配置保存在app.json文件中,這篇文章主要介紹了微信小程序導入項目后報錯找不到app.json簡單的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2025-06-06
  • JS實現(xiàn)簡單的九宮格抽獎

    JS實現(xiàn)簡單的九宮格抽獎

    這篇文章主要為大家詳細介紹了JS實現(xiàn)簡單的九宮格抽獎,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論