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 相关文章推荐
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
vue element table中自定义一些input的验证操作
Jul 18 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
js实现身份证号码验证的简单实例
2014/02/19 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
python opencv3实现人脸识别(windows)
2018/05/25 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python简单区块链模拟详解
2019/07/03 Python
python与pycharm有何区别
2020/07/01 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
SQL Server笔试题
2012/01/10 面试题
法学个人求职信范文
2014/01/27 职场文书
大学活动总结范文
2014/04/29 职场文书
生日庆典策划方案
2014/06/02 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
高中生旷课检讨书
2014/10/08 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
大学生暑期实践报告
2015/07/13 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
Web应用开发TypeScript使用详解
2022/05/25 Javascript