基于WebGL架构的3D可视化平台—实现汽车行走路线演示

摘要:
小车行走路线演示NewVSOld刚接触ThingJS的时候,写的一个小车开进小区的演示,今天又看了教程中有movePath这个方法就重新写了一遍,其中也遇到了一些问题,尤其突出的问题就是小车过弯的尴尬表现。再看看New版本,AE86过弯不再笨拙顺畅无比,New版演示地址。New版本放弃了这种办法,这种过弯实在让人看着不舒服,也不符合现实世界。');}});第三步,创建小车的行进路线和演示按钮。

小车行走路线演示New VS Old

刚接触ThingJS的时候,写的一个小车开进小区的演示,今天又看了教程中有movePath这个方法就重新写了一遍,其中也遇到了一些问题,尤其突出的问题就是小车过弯的尴尬表现。

先给大家看看Old版本,Old版演示地址。
在这里插入图片描述

再看看New版本,AE86过弯不再笨拙顺畅无比,New版演示地址。
在这里插入图片描述

第二张效果图上可以看到由点连起来的路线,我的AE86也是严格按照路线行进的,相比于Old版本过弯的时候舒畅多了。Old版本是用setTimout(),rotateY(),moveTo()方法设置了几个点跑出来的。New版本放弃了这种办法,这种过弯实在让人看着不舒服,也不符合现实世界(排除醉酒驾驶司机)。下面就说一下New版本。

第一步,进入ThingJS在线开发,将场景地址替换成我们今天要用的,也可以自己去搭一个场景,campusBuilder下载地址

/**
 * 说明:创建App,url为场景地址(可选)
 */
var app = new THING.App({
	//场景地址
    url: 'http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/2018-10-30-17-20-23'     
});

第二步,在模型库里挑选一个你喜欢的车,种类丰富任你选择。

app.create({ 
   type: 'Car', 
   name: 'Car01',
   angle: 90, // 旋转 
   //这里我选了一台黑车,没找到AE86
   url: 'http://model.3dmomoda.cn/models/c6ed424627234a298c1921950eb8534c/0/gltf/', 
   //位置
   position: [-32, 0, 26.2],
   complete: function () {
       console.log('Black Car !');
   }
});

基于WebGL架构的3D可视化平台—实现汽车行走路线演示第3张

第三步,创建小车的行进路线和演示按钮。

app.on('load', function () {

    // 创建blackCar行进路线
    var points = [];
    for (var x = -32, y = 0, z = 26.2 ; x <= 28; x += 4) {
        points.push([x, y, z]);
    }
    var radius = 1.75;
    for (var degree = 0, y = 0; degree <= 180; degree += 20) {
        var x = Math.sin(degree * 2 * Math.PI / 360) * radius + 28.5;
        var z = Math.cos(degree * 2 * Math.PI / 360) * radius + 24.45;
        points.push([x, y, z]);
    }
    for (var x = 27.5, y = 0, z = 22.7 ; x >= -6; x -= 4) {
        points.push([x, y, z]);
    }
    for (var degree = 0, y = 0; degree >= -90; degree -= 20) {
        var x = Math.sin(degree * 2 * Math.PI / 360) * radius -5.5;
        var z = Math.cos(degree * 2 * Math.PI / 360) * radius + 20.95;
        points.push([x, y, z]);
    }
    for (var x = -7.2, y = 0, z = 20.25 ; z >= 6; z -= 2) {
        points.push([x, y, z]);
    }

    //创建轨迹线
    line = app.create({
        type: 'Line',
        color: 0xFFFF00, // 轨迹线颜色
        dotSize: 2, // 轨迹点的大小
        points: points,
    })
    
     THING.widget.Button('车辆路线', play);
});

最后一步,让小车动起来创建play()方法。

function play() {
    var car = app.query('Car01')[0];
    car.movePath({
        'path': line.points, // 轨迹路线
        'time': 10000, // 移动时间
        'orientToPath': true, 
    });
    app.camera.lookAt(car);
    
    // app.camera.followObject({
    //     object:car,
    // });
}

做到这里小车已经可以动起来了,但是这个视角并不好,下面介绍一下摄像机中的followObject(params)。
API地址

基于WebGL架构的3D可视化平台—实现汽车行走路线演示第4张

创建一个Car类继承THING.BaseObject,将物体类型转换成Car类型

//创建Car类
class Car extends THING.BaseObject{
    constructor(app) {
        super(app);
    }
}
THING.Utils.addCastType('Car', /Car/);  
THING.factory.registerClass('Car', Car);
//加到play()
app.camera.followObject({
        object:car,
    });

下图是加了摄像机跟随物体的效果
跟随物体
短短80行代码,其中我也遇到了不少问题划重点的就是app.camera.followObject()中object的类型问题,还有就是模型库里有一些车的模型比较奇怪,比如下图。
在这里插入图片描述
以下是完整代码

//加载场景代码
var app = new THING.App({ 
    // 场景地址
    "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/2018-10-30-17-20-23",
    //背景设置
    
});

// 创建Car
app.create({ 
   type: 'Car', 
   name: 'Car01',
   angle: 90, // 旋转 
   url: 'http://model.3dmomoda.cn/models/c6ed424627234a298c1921950eb8534c/0/gltf/', 
   //位置
   position: [-32, 0, 26.2],
   complete: function () {
       console.log('Black Car !');
   }
});
//创建Car类
class Car extends THING.BaseObject{
    constructor(app) {
        super(app);
    }
}
THING.Utils.addCastType('Car', /Car/);  
THING.factory.registerClass('Car', Car);

person.on('load',function())

app.on('load', function () {

    // 创建blackCar行进路线
    var points = [];
    for (var x = -32, y = 0, z = 26.2 ; x <= 28; x += 4) {
        points.push([x, y, z]);
    }
    var radius = 1.75;
    for (var degree = 0, y = 0; degree <= 180; degree += 20) {
        var x = Math.sin(degree * 2 * Math.PI / 360) * radius + 28.5;
        var z = Math.cos(degree * 2 * Math.PI / 360) * radius + 24.45;
        points.push([x, y, z]);
    }
    for (var x = 27.5, y = 0, z = 22.7 ; x >= -6; x -= 4) {
        points.push([x, y, z]);
    }
    for (var degree = 0, y = 0; degree >= -90; degree -= 20) {
        var x = Math.sin(degree * 2 * Math.PI / 360) * radius -5.5;
        var z = Math.cos(degree * 2 * Math.PI / 360) * radius + 20.95;
        points.push([x, y, z]);
    }
    for (var x = -7.2, y = 0, z = 20.25 ; z >= 6; z -= 2) {
        points.push([x, y, z]);
    }

    //创建轨迹线
    line = app.create({
        type: 'Line',
        color: 0xFFFF00, // 轨迹线颜色
        dotSize: 2, // 轨迹点的大小
        points: points,
    })
    
     THING.widget.Button('车辆路线', play);
});

function play() {
    var car = app.query('Car01')[0];
    car.movePath({
        'path': line.points, // 轨迹路线
        'time': 10000, // 移动时间
        'orientToPath': true, 
    });
    //app.camera.lookAt(car);
    
    app.camera.followObject({
        object:car,
    });
}

---------------------
作者:extends Thread
来源:CSDN
原文:https://blog.csdn.net/nioooom/article/details/84069266
版权声明:本文为博主原创文章,转载请附上博文链接!

免责声明:文章转载自《基于WebGL架构的3D可视化平台—实现汽车行走路线演示》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇命令执行漏洞攻击&amp;amp;修复建议如何同步多个 git 远程仓库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R语言ggmap空间可视化机动车交通事故地图

原文链接:http://tecdat.cn/?p=12350 在本文中,我使用ggmap可视化纽约市的交通事故。  数据来自纽约市开放数据。我的数据范围是2012年至2015年。该数据跟踪车辆的类型,发生事故的街道的名称以及事故的经度和纬度坐标。两个坐标都保存为单个字符变量,称为“ LOCATION”。 在下面,我加载数据,删除所有没有位置坐标的事故,并...

Core Animation 文档翻译 (第二篇)—核心动画基础要素

前言 核心动画为我们APP内Views动画和其他可视化元素动画提供了综合性的实现体系。核心动画不是我们APP内Views的替代品,相反,它是一种结合Views来提供更好性能和支持Content动画的技术。它通过将Views的Content缓存进可以被绘图软件直接操作处理的Bitmaps来达到这种高性能。在某些情况下,这种缓存技术可能需要我们重新思考我们将...

推荐一款 ES 集群可视化工具:Cerebro,简单、实用!

Cerebro 是以前的 Elasticsearch 插件 Elasticsearch Kopf 的演变 – 这不适用于 Elasticsearch 版本5.x或更高版本,这是由于删除了 site plugins。 https://github.com/lmenezes/elasticsearch-kopf Cerebro 是查看分片分配和最有用的界面之一...

Git配置可视化的diff 和merge工具

Windows下使用Git,msysgit是首选,但是msysgit的shell实在不给力,大小不能更改,字体难看。所以,在Windows下,在Cygwin下使用Git是个很不错的选择。 我们在提交代码前,或是合并代码,查看代码修改时,经常要diff一下看看都有哪些修改内容,diff的输出,晦涩难懂,修改多了的时候,简直像天书一样。Git 1.7以后,有了...

基于R语言股票市场收益的统计可视化分析

原文链接:http://tecdat.cn/?p=16453  金融市场上最重要的任务之一就是分析各种投资的历史收益。要执行此分析,我们需要资产的历史数据。数据提供者很多,有些是免费的,大多数是付费的。在本文中,我们将使用Yahoo金融网站上的数据。 在这篇文章中,我们将: 下载收盘价 计算收益率 计算收益的均值和标准差 让我们先加载库。   li...

基于JVisualVM的可视化监控

监控本地的java进程 本小节我们介绍一下如何使用JDK自带的jvisualvm工具来监控本地的Java进程,该工具是一个图形化的监控工具。 jvisualvm官方文档地址如下:https://visualvm.github.io/documentation.html 介绍 VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已...