Three.js呈现3D效果机房–初步方案[通俗易懂]

Three.js呈现3D效果机房–初步方案[通俗易懂]3D机房系统是最近用户的需求,通过相关了解最后使用Three.js,也发现最近有东西可以写出来分享:webGL可以让我们在canvas上实现3D效果。而three.js是一款webGL框架,由于其易用性被广泛应用Three.js是通过对WebGL接口的封装与简化而形成的一个易用的图形库分步实现3D效果初始化3D模型参数开始搭建场景初始化渲染器初始化摄像机创建场景灯光布置创建网格线

大家好,又见面了,我是你们的朋友全栈君。

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

##最后效果
这里写图片描述

##浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome.
  2. IE11以下不支持
  3. 还有很多详细代码没有贴上
  4. 百度网盘demo 地址:[网盘]: https://pan.baidu.com/s/10_NWYuZfCcEpblslPcdW8w 提取码: ca1f
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139664.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • zookeeper分布式锁实现原理(分布式锁怎么实现)

       摘要:本文要使用Zookeeper来实现一个分布式锁,是一个悲观锁。  本文源码请在这里下载:https://github.com/appleappleapple/DistributeLearning一、锁设计  获取锁实现思路:1.首先创建一个作为锁目录(znode),通常用它来描述锁定的实体,称为:/lock_node2.希望获得锁的客户端在锁目录下创建zno…

    2022年4月15日
    52
  • qmake:变量手册

    qmake:变量手册qmake的基本行为受定义每个项目构建过程的变量声明的影响。1、ANDROID_ABIS此变量仅适用于Android目标。指定Android目标ABI列表。有效值为:armeabi-v7a、arm64-v8a、x86、x86_64。如:qmakeANDROID_ABIS=”armeabi-v7aarm64-v8a”2、ANDROID_API_VERSION此变量仅适用于Android目标。指定AndroidAPI级别编号。3、ANDROID

    2022年5月19日
    40
  • 网页自动化操作之-全自动下单(淘宝/天猫)

    网页自动化操作之-全自动下单(淘宝/天猫)声明:本博客所有软件不含任何恶意代码,请放心使用QQ/微信112908676最新下载地址https://webcrawl.lanzous.com/b0dvn942d密码:htig旧版2019.11.08版本2.4.3,下载地址:https://www.lanzous.com/i785doh下载结束如遇360弹出压缩包解密提醒,请直接取消忽略操作视频2019.03.07更新优酷:https://v.youku.com/v_show/id_XNDA4OTE2O.

    2022年5月20日
    42
  • Spring Data JPA 写SQL语句也可以如此简单

    Spring Data JPA 写SQL语句也可以如此简单在使用SpringDataJPA的时候,通常我们只需要继承JpaRepository就能获得大部分常用的增删改查的方法。有时候我们需要自定义一些查询方法,可以写自定义HQL语句像这样/***根据关注者id查找所有记录(查找关注的人的id)**@paramfromUserId*@return*/…

    2022年10月20日
    2
  • jQuery的目标

    jQuery的开篇声明里有一段非常重要的话:jQuery是为了改变javascript的编码方式而设计的。从这段话可以看出jQuery本身并不是UI组件库或其他的一般AJAX类库。jQuery改变ja

    2021年12月24日
    49
  • navaicat 15 for mysql 激活码【在线破解激活】[通俗易懂]

    navaicat 15 for mysql 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号