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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
网页javascript精华代码集
Jan 24 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
jquery五角星评分插件示例分享
Feb 21 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
深入理解(function(){... })();
Aug 16 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
150行代码带你实现微信小程序中的数据侦听
May 17 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
Apr 06 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(5) 类和对象
2010/02/16 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
PHP中PDO的错误处理
2011/09/04 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Python正则表达式和元字符详解
2018/11/29 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
python 同时读取多个文件的例子
2019/07/16 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
质检部职责
2013/12/28 职场文书
心得体会开头
2014/01/01 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
应急处置方案
2014/06/16 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS