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增加join方法的实现代码
Nov 28 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
jquery中map函数遍历数组用法实例
May 18 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
jQuery中layer分页器的使用
Mar 13 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
Jul 22 Javascript
详解如何在Javascript中使用Object.freeze()
Oct 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
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
Bootstrap表单布局
2016/07/19 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
详解Vue.js 响应接口
2020/07/04 Javascript
利用python获取Ping结果示例代码
2017/07/06 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
python音频处理的示例详解
2020/12/23 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
C#中的验证控件有几种
2014/03/08 面试题
高二生物教学反思
2014/01/27 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
计算机网络专业求职信
2014/06/05 职场文书
雨花台导游词
2015/02/06 职场文书
房产电话营销开场白
2015/05/29 职场文书
军训结束新闻稿
2015/07/17 职场文书
田径运动会通讯稿
2015/07/18 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python