PLOY3D引擎系列教程

PLOY3D引擎系列教程

PLOY3D引擎【预览版】是卜云 PLOYCLOUD推出的基于WebGPU、WebGL2.0、WebAssembly和TypeScript开发的原生Web3D、AR和VR引擎。具有功能完备、轻量级、高性能的优势,可以在手机、平板、笔记本、PC电脑等全终端浏览器上稳定运行。是Web前端开发3D地图、3D可视化、数字孪生等智慧应用以及娱乐游戏的最佳选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提示:获取引擎SDK和样例代码请访问gitee以及查阅api文档 。更多引擎和引擎编辑器演示视频请关注抖音号。文章可转载,谢谢!

系列目录

  • 简单的3D场景
  • 简单的物理碰撞模拟场景
  • 简单的GLTF模型导入
  • 复杂的GLTF模型导入(包含骨骼蒙皮、网格变形表情、动画)
  • 可扩展的包含骨骼驱动和动画驱动的角色控制器


一、PLOY3D应用的最基本框架

本文将介绍如何搭建PLOY3D应用的最基本框架,后续教程都在该框架下补充完善。这也是实际项目开发的建议起点。

二、使用步骤

1.在HTML中引入相关脚本

引入引擎SDK核心脚本和样例程序脚本:

<script src="./common/miaoverse/miaoverse.js"></script>
<script src="./js/examples.js"></script>

HTML页面装载完成后启动业务应用:

<script>
    // 资源包服务路径(发布前请修改)
    var packageUrl = "";
    // 后台接口服务路径(发布前请修改)
    var serviceUrl = "";
    // 引擎发布号(发布前请修改)
    var engineVer = "r01";

    // 页面装载完成后启动引擎,并运行业务应用
    window.onload = function () {
        // 启动APP类,该函数实现在examples.js样例脚本中
        Start("default", (app) => {
            console.log(app);
        });
    }
</script>

2.在TS脚本中实现实例化逻辑

创建PLOY3D引擎实例:

// 创建PLOY3D引擎实例
const Engine = new Miaoverse({
    // 引擎起动时间戳
    startTS: Date.now(),
    // 子线程脚本路径
    workerUrlJS: "./common/miaoverse/miaoverse.worker.js",
    // 进度条控制方法
    Progress(rate, msg, log) {
        App.Progress(rate, msg, log);
    },
    // ...其它配置项请查阅api文档
});

定义应用启动入口函数:

function Start(appid: string, callback: (app: WebApp) => void) {
    App = new WebApp();

    App.Startup()
        .then((app_) => {
            callback(app_);
        })
        .catch(msg => {
            Engine.Track(msg);

            callback(null);
        });
}

3.自定义实现WebApp类

实现页面UI绘制方法WebApp.InitUI:

protected async InitUI(progress: (rate: number, msg: string) => void) {

    // 可以使用React等在此绘制您的页面 ...

    progress(1.0, "UI渲染完成");

    return true;
}

实现引擎初始化方法WebApp.InitEngine:

protected async InitEngine(progress: (rate: number, msg: string) => void) {

    await Engine.Startup(progress);

    progress(1.0, "引擎初始化完成");

    return true;
}

实现场景初始化方法WebApp.InitScene:

protected async InitScene(progress: (rate: number, msg: string) => void) {
    // 以默认方法配置并运行场景
    // 该默认方法创建并激活了一个空白场景,并将鼠标事件关联到场景自带相机上,使用默认的相机控制逻辑
    // 用户可参考文档自定义实现该方法
    Engine.scenes.Run();

    // 可以在此处添加其它场景模型 ...

    progress(1.0, "场景初始化完成");

    return true;
}

实现应用启动方法WebApp.Startup:

public async Startup() {
    // 获取3D画布元素,引擎帧将渲染到该画布元素上
    this._canvas3d = document.getElementById("canvas3d");

    // 首先初始化UI,确保画布元素已经在DOM中
    await this.InitUI((rate: number, msg: string) => {
        this.Progress(0.1 * rate, msg, true);
    });

    // 初始化PLOY3D引擎
    await this.InitEngine((rate: number, msg: string) => {
        this.Progress(0.1 + 0.4 * rate, msg, true);
    });

    // 创建、激活并初始化3D场景
    await this.InitScene((rate: number, msg: string) => {
        this.Progress(0.5 + 0.5 * rate, msg, true);
    });

    // 响应ESC键关闭应用
    Engine.scenes.AddKeyboardListener("down", (key) => {
        if (key == 27 && this._started) {
            this.Shutdown();
        }
    });

    // 启动完成、关闭进度条
    this._started = true;
    this.Progress(-1, "");

    // 令引擎连续绘制60万帧
    // 通常我们不建议这么做,而是必要时在调用刷新画面,这有助于降低移动端能耗
    Engine.scenes.DrawFrame(600000);

    return this;
}

实现应用退出方法WebApp.Shutdown:

public async Shutdown() {
    if (!this._started) {
        return;
    }

    this._started = false;

    const state = await Engine.Shutdown();

    // 按正常流程关闭您的应用,并检视应用的终末状态,有助于发现应用开发中存在的一些问题
    console.log(state);
}

总结

以上即为PLOY3D应用的最基本结构,在具体项目中主要是修改场景初始化方法(WebApp.InitScene),并将UI中的数据和事件与场景内容联动起来,后续教程我们将逐步讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值