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 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
Mar 16 Javascript
javascript十六进制及二进制转化的方法
May 06 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
webpack入门必知必会
Jan 16 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
微信小程序自定义对话框弹出和隐藏动画
Jul 19 Javascript
angular 服务随记小结
May 06 Javascript
小程序中英文混合排序问题解决
Aug 02 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
js DOM的事件常见操作实例详解
Dec 16 Javascript
JavaScript直接调用函数与call调用的区别实例分析
May 22 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
php while循环得到循环次数
2013/10/26 PHP
php生成短网址示例
2014/05/05 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
深入理解PHP中的count函数
2016/05/31 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Display SQL Server Version Information
2007/06/21 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Python单链表的简单实现方法
2014/09/23 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
快速入门python学习笔记
2017/12/06 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python 操作hive pyhs2方式
2019/12/21 Python
python实现FTP循环上传文件
2020/03/20 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
青年文明号复核材料
2014/02/11 职场文书
关于元旦的广播稿
2014/02/16 职场文书
关爱老人标语
2014/06/21 职场文书
重点工程汇报材料
2014/08/27 职场文书
2015年安全生产责任书
2015/01/30 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技