温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

three.js Mool3D模型类如何使用

发布时间:2023-05-09 17:42:31 来源:亿速云 阅读:95 作者:iii 栏目:开发技术

这篇文章主要介绍“three.js Mool3D模型类如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“three.js Mool3D模型类如何使用”文章能帮助大家解决问题。

    Model类

    场景加载

    加载场景主要使用引擎中的model类来实现,引擎中model类主要功能有配置文件模型加载、场景切换、单一自定义模型加载、场景下动画的控制等~

    //下方为简单场景的加载
    import { Viewer } from "../Threejs/index";
    export class Index extends Viewer {
      constructor(options) {
        super(options);
        this.initModel();
      }
    }

    推荐通过继承主类的方式扩展业务代码,上方是一个最简单的场景加载示例。细心的同学可以发现上方只是初始化了一个model类而已如何完成场景的加载的,当然完成场景加载还需要一个触发场景的条件,这我们通常可以在容器文件中实现。下方就是最简单的场景加载容器

    //vue文件
    //初始化
    const init = () => {
      const el = refmap.value;
      sceneA = new Index({
        el: el as HTMLElement,
        tween: TWEEN,
        path: "../public/scene/", //基础路径
      });
      setScene(1);
    };
    //切换场景
    const setScene = (id) => {
      switch (id) {
        case 1:
          sceneA.setScene(1, () => {
              //场景加载成功回调
          });
          sceneA.flyTo({ //相机位置
            position: [0, 5, 6],
            controls: [0, 0, 0],
            duration: 2000,
          });
          break;
        default:
          break;
      }
    };

    场景配置文件

    上方代码通过场景id加载场景,那是如何知道需要加载哪些模型呢?引擎通过config.json文件约束不同场景下所依赖的模型文件,配置文件存放路径为基础路径下(../public/scene/) 下方详细介绍配置文件~

    [
      {
        "name": "mool", //名称
        "target": false, //是否被鼠标拾取
        "layeridx": 1, //场景id
        "scale": 1, //场景缩放
        "positionX": 50, //场景初始位置
        "positionY": 120,
        "positionZ": 170,
        "layers": [ //场景模型配置对象
          {
            "name": "./glb/building1.glb"
          },
          {
            "name": "./glb/building2.glb"
          }
        ]
      }
      ......
    ]

    递归处理场景模型

    照着上方的操作,我们完成了场景的加载。这时场景已经呈现在画面上,如果我们需要修改场景模型的材质等操作怎么做呢? 当然模型类中也考虑到这一点,提供了一个回调处理解码的模型,具体怎么操作见下方~

    constructor(options) {
        super(options);
        this.initModel();
        //这是在加载场景模型之前执行的回调,所以建议放在初始化类时完成回调的注册,这样会在模型加载过程中递归去修改模型
        this.model.deepFunction.push(({ e , item }) => {
         // e:模型碎片Mesh / item:场景配置文件
          e.scale.set(300, 300, 300);
        });
    }

    不推荐什么方法都放在constructor中去调用,由于模型加载时才会去设置当前场景的id,如在constructor中初始化天空和灯光等,会出现无效的情况,出现这种情况是因为场景id默认值为1,都加载到场景1中去了。所以模型类提供一个场景加载成功的回调,在里面初始化场景需要的一些修饰类如灯光、天空、环境贴图等~

    sceneA.setScene(1, () => {
        //场景加载成功回调
        sceneA.initEnvironment({
          path: "exr.exr",
          type: "exr",
        });
    });

    加载独立模型

    如何加载独立于场景配置文件之外的模型呢?模型类提供GLBFBX两种类型模型加载方法,具体见下方说明~

    //加载glb/gltf模型
    this.model.loadModel(
      "../public/scene/glb/walk.glb",
      this.sceneidx,
      (glb, animations) => {
        glb:为模型对象
        animations:模型动画
        ...模型自定义修改
      }
    );
    //加载fbx模型
    this.model.loadFbxModel(
      "../public/scene/glb/walk.fbx",
      this.sceneidx,
      (fbx, animations) => {
        fbx:为模型对象
        animations:模型动画
         ...模型自定义修改
      }
    );

    注意上方只提供加载模型,不会主动添加到场景中,需修改定制化模型参数之后手动将其add到场景中~

    动画

    模型类中提供两种执行动画的方法,一种是执行场景下的所有动画,一种是执行某个名称的动画。具体使用见下方说明~

    //执行场景下的所有动画
    this.model.playAllClipes(this.sceneidx);//传入场景的id
    //执行某名称的动画
    this.model.playNameClipes(this.sceneidx,'mool');//传入场景的id和动画名称

    关于“three.js Mool3D模型类如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI