Skip to content

从GLTF/GLB加载模型

在之前的绘制一个正方体中,我们程序化的创建了一个立方体,但同时指出,大多数网格模型并不是由程序化创建出来的,而是由如3DMax等专业的第三方工具创建的,创建后导出成通用格式,再到RoyEngine中使用。那么Gltf/Glb就是一种模型通用格式(Glb是Gltf的二进制版本,binary版本,二者本身是一种格式),这种格式是由khronos组织定义的。

typescript
onStart() {
    super.onStart();

    this.loadGLBModel({
        url: "https://3vj-render.3vjia.com/royassets/logic-panorama/model/classicSofa.glb",
        filename: "classicSofa"
    });
}

async loadSinglModel(modelInfo: FileLoadOption) {
    const operRootNode = this.m_scene.createSceneNode(modelInfo.filename as string);
    operRootNode.setUserData('ModelInfo', modelInfo);
    this.m_modelList.push(operRootNode);

    let glbLoadComp: GlbLoadComponent = operRootNode.createComponent(GlbLoadComponent);
    glbLoadComp.url = UrlHelper.formatUrl(modelInfo.url);
    glbLoadComp.scaleValue = modelInfo.scale || 1;
    const rlt = await glbLoadComp.createGlb();
    if (!rlt) {
        return;
    }

    this.m_scene.rootSceneNode.addChild(operRootNode);
    return operRootNode;
}
  • 同样的,初始引擎并创建场景之后,我们找到了onStart函数,并执行了loadSinglModel函数.
  • 引擎已经提供了一个名为GlbLoadComponent的组件,创建对应的场景节点,并从中创建GlbLoadComponent,然后把glb的url地址告诉他,执行createGlb方法即可。是不是突然简单了很多?
  • 在后面的开发中,更多的是这种通用文件的格式而非程序化建模。而通用格式的解析也被封装到组件中以达到各个项目复用的目的。正如在创建第一个组件中描述的,希望各个组件封装成为Component的形式,好处是大家都能够非常好的理解一个公用的形式,而不是自己定义的很特化的类,每个开发者一种形式,然后还觉得自己的类封装的不错。

好了,快速开始的全部内容就完成了,继续开始你的RoyEngine之旅吧。

接下来推荐的内容:

  • 核心: Roy场景的组织方式(Object-Component)
  • 交互: 系统消息响应与操作基本组件封装
  • 图形: 渲染对象在引擎中的封装