最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 仅需几行代码轻松实现第一人称行走

    正文概述 掘金(ThingJS_小锘)   2021-05-20   459

    1、第一人称行走

    2、实现

    3、操作步骤

    4、结语

    在数字孪生可视化领域利用 WebGL来创建三维场景已经越来越普遍,各种开发框架也应运而生。今天我们就通过ThingJS来完成第一人称视角的场景巡视功能。如果你是一位数字孪生可视化的初学者或正打算入门,我强烈推荐你仔细阅读本文并在我的代码基础之上继续深入学习。

    第一人称视角的数字孪生可视化场景巡视主要需要解决两个问题,人物在场景中的移动和碰撞检测。移动与碰撞功能是所有三维场景首先需要解决的基本问题。为了方便理解,首先需要构建一个简单的数字孪生可视化场景。ThingJS 内置了「第一人称行走」控件,实现第一人称人物动作:走、跑、跳、移动视角,可供开发者使用。

    • 实现

    官方添加「第一人称行走」控件后,鼠标按住左键拖拽方向,默认的交互为键盘按键来控制行走方向:

    首先看一下效果:

    仅需几行代码轻松实现第一人称行走

    这种3D场景中的第一人称行走仅需20行代码就能轻松实现,代码如下:

    var app = new THING.App({
     url: 'https://www.thingjs.com/static/models/storehouse'
    });
     
    // 加载场景后执行
    app.on('load', function () {
     app.camera.position = [0, 10, 0]; // 起始位置 就是摄像机位置, 不设置就会在摄像机位置直接开始
     var ctrl = app.addControl(
     new THING.WalkControl({
     walkSpeed: 0.02, // 行走速度
     turnSpeed: 0.25, // 右键旋转速度
     gravity: 29.8, // 物体重量
     eyeHeight: 1.6, // 人高度
     jumpSpeed: 10, // 按空格键 跳跃的速度
     enableKeyRotate: false, // 默认不开启键盘控制旋转
     useCollision: false, // 默认不开启碰撞检测
     useGravity: true // 默认开启重力
     })
     );
    });
    
    • 操作步骤

    第一步,用 CompusBulider (模模搭)工具创建场景,然后将场景导出,并存为 .tjs 格式。

    第二步,将导出的数字孪生可视化场景放在ThingJS平台上加载。

    仅需几行代码轻松实现第一人称行走

    第三步,设置摄像机位置等参数,然后通过摄像机遵循路线形成第一人称的视角,达到第一人称进入3D场景的效果。起始位置就是摄像机位置,不设置就会在摄像机位置直接开始,几行代码就可以实现第一人称行走(代码已贴在文中)。 第四步,还可以添加第一人称行走控件,设置键盘控制旋转、碰撞检测、重力检测等,GUI(图形用户界面)手动调整参数。

     // GUI
     gui = new THING.widget.Panel({ 'titleText': '第一人称行走', 'hasTitle': true });
     
     gui.position = [10, 200];
     
     gui.addBoolean(ctrl, 'enableKeyRotate').caption('键盘控制旋转');
     gui.addBoolean(ctrl, 'useCollision').caption('碰撞检测');
     gui.addBoolean(ctrl, 'useGravity').caption('重力检测');
     
     gui.addNumberSlider(ctrl, 'gravity').caption('重力').step(1).min(0).max(50).isChangeValue(true);
     gui.addNumberSlider(ctrl, 'jumpSpeed').caption('跳起速度').step(1).min(0).max(30).isChangeValue(true);
    }
     
    /**
     * 删除控件
     */
    function remove_control() {
     if (ctrl) {
     // 设置摄像机位置和目标点
     app.camera.position = [50.260000000000005, 35.129000000000005, 59.32699999999999];
     app.camera.target = [10.852, 0.175, 9.311];
     
     app.removeControl(ctrl);
     ctrl = null;
     gui.destroy();
     }
    }
     
    

    第一人称视角的巡视效果就完成了。

    完整代码如下:

    var app = new THING.App({
     url: 'https://www.thingjs.com/static/models/storehouse'
    });
     
    // 加载场景后执行
    app.on('load', function () {
     // 创建按钮
     new THING.widget.Button('添加控件', add_control);
     new THING.widget.Button('重置', remove_control);
    });
     
    /**
     * 添加控件
     */
    var ctrl = null;
    var gui = null;
    function add_control() {
     if (ctrl) {
     return;
     }
     
     app.camera.position = [0, 10, 0]; // 起始位置 就是摄像机位置, 不设置就会在摄像机位置直接开始
     ctrl = app.addControl(
     new THING.WalkControl({
     // 参数可以动态修改
     walkSpeed: 0.02, // 行走速度
     turnSpeed: 0.25, // 右键旋转速度
     gravity: 29.8, // 物体重量
     eyeHeight: 1.6, // 人高度
     jumpSpeed: 10, // 按空格键 跳跃的速度
     enableKeyRotate: false, // 默认不开启键盘控制旋转
     useCollision: false, // 默认不开启碰撞检测
     useGravity: true // 默认开启重力
     })
     );
     // GUI
     gui = new THING.widget.Panel({ 'titleText': '第一人称行走', 'hasTitle': true });
     
     gui.position = [10, 200];
     
     gui.addBoolean(ctrl, 'enableKeyRotate').caption('键盘控制旋转');
     gui.addBoolean(ctrl, 'useCollision').caption('碰撞检测');
     gui.addBoolean(ctrl, 'useGravity').caption('重力检测');
     
     gui.addNumberSlider(ctrl, 'gravity').caption('重力').step(1).min(0).max(50).isChangeValue(true);
     gui.addNumberSlider(ctrl, 'jumpSpeed').caption('跳起速度').step(1).min(0).max(30).isChangeValue(true);
    }
     
    /**
     * 删除控件
     */
    function remove_control() {
     if (ctrl) {
     // 设置摄像机位置和目标点
     app.camera.position = [50.260000000000005, 35.129000000000005, 59.32699999999999];
     app.camera.target = [10.852, 0.175, 9.311];
     
     app.removeControl(ctrl);
     ctrl = null;
     gui.destroy();
     }
    }
    
    • 结语: 通过上面的轻量化代码就可以发现,使用ThingJS很简单就能够实现巡视的效果,仅用20行代码就可以轻松实现第一人称在3D场景中行走。 那么这次就先到这里了,大家感兴趣的话可以自己动手试一试。

    起源地下载网 » 仅需几行代码轻松实现第一人称行走

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元