当前位置: 移动技术网 > IT编程>开发语言>JavaScript > Three.js实现3D机房效果

Three.js实现3D机房效果

2019年01月07日  | 移动技术网IT编程  | 我要评论
3d机房系统是最近用户的需求,通过相关了解最后使用three.js,也发现最近有东西可以写出来分享: webgl可以让我们在canvas上实现3d效果。而thre

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

最后效果


浏览器兼容

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网