Three.js实现3D机房效果


Posted in Javascript onDecember 30, 2018

3D机房系统是最近用户的需求,通过相关了解最后使用Three.js,也发现最近有东西可以写出来分享:

  • webGL可以让我们在canvas上实现3D效果。而three.js是一款webGL框架,由于其易用性被广泛应用
  • Three.js是通过对WebGL接口的封装与简化而形成的一个易用的图形库

分步实现3D效果

  • 初始化3D模型参数
  • 开始搭建场景
  • 初始化渲染器
  • 初始化摄像机
  • 创建场景
  • 灯光布置
  • 创建网格线
  • 循环渲染界面
  • 创建鼠标控制器
  • 添加对象到场景中

一 . 初始化3D模型参数

//参数处理 
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;

对于一些需要使用的参数,开始加载进行初始化操作。

二 . 开始搭建场景

搭建场景包含一些具体的初始化操作 一些初始化方法(之后才对具体方法加以说明):

var that = this; 
room3dObj = that; 
that.initThree(that.id); //初始化渲染器 
that.initCamera(); //初始化摄像机 
that.initScene();//创建场景 
that.initHelpGrid();//创建网格 
that.initLight();//灯光布置 
//添加3D对象 
$.each(that.objList, function (index,obj) { 
that.InitAddObject(obj);//添加对象到场景中 
}); 
that.initMouseCtrl();//创建鼠标控制器 
that.animation();//循环渲染界面

三 . 初始化渲染器

渲染器 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);

五 . 创建场景

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

六 . 灯光布置

/* 
AmbientLight: 环境光,基础光源,它的颜色会被加载到整个场景和所有对象的当前颜色上。 
PointLight:点光源,朝着所有方向都发射光线 
SpotLight :聚光灯光源:类型台灯,天花板上的吊灯,手电筒等 
DirectionalLight:方向光,又称无限光,从这个发出的光源可以看做是平行光. 
*/ 
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;//表示这个光是可以产生阴影的 
that.scene.add(light2);

七 . 创建网格

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

八 . 循环渲染界面

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

九 . 创建鼠标控制器

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

最后效果

Three.js实现3D机房效果

浏览器兼容

  • 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome.
  • IE11以下不支持

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
慎用 somefunction.prototype 分析
Jun 02 Javascript
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
JavaScript中的字符串操作详解
Nov 12 Javascript
封装的jquery翻页滚动(示例代码)
Nov 18 Javascript
js 本地预览的简单实现方法
Feb 18 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
jquery实现加载进度条提示效果
Nov 23 Javascript
微信开发 js实现tabs选项卡效果
Oct 28 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
微信小程序实现电子签名功能
Jul 29 Javascript
vue项目中微信登录的实现操作
Sep 08 Javascript
JavaScript对象的特性与实践应用深入详解
Dec 30 #Javascript
three.js搭建室内场景教程
Dec 30 #Javascript
Three.JS实现三维场景
Dec 30 #Javascript
Three.js实现简单3D房间布局
Dec 30 #Javascript
JavaScript数组特性与实践应用深入详解
Dec 30 #Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 #Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 #Javascript
You might like
如何使用PHP中的字符串函数
2006/11/24 PHP
php缓存技术详细总结
2013/08/07 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
Javascript面向对象编程
2012/03/18 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
详解JS数值Number类型
2018/02/07 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
汽修专业学生自我鉴定
2013/11/16 职场文书
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
打架检讨书100字
2014/01/19 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
三严三实对照检查材料
2014/08/25 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
python中tkinter复选框使用操作
2021/11/11 Python