three.js Mool3D模型类的使用

 更新时间:2023年03月31日 16:33:09   作者:Mool  
这篇文章主要为大家介绍了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和动画名称

结语

本文为Mool3D引擎下的模型类的介绍和使用,主要设计思想是通过配置文件完成场景加载,提供自定义模型的加载和场景动画的控制。

更多关于three.js Mool3D模型类的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript实现图片瀑布流和底部刷新

    JavaScript实现图片瀑布流和底部刷新

    这篇文章主要为大家详细介绍了JavaScript实现图片瀑布流和底部刷新,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JS如何生成随机验证码

    JS如何生成随机验证码

    这篇文章主要为大家详细介绍了JS如何生成随机验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 再谈Javascript中的异步以及如何异步

    再谈Javascript中的异步以及如何异步

    大家都知道js是单线程的,执行起来是顺序的,在顺序的业务逻辑中当然没有问题,如果遇到可以并发执行的业务逻辑,再排队就很低级了!所以这里我们再来简单的谈谈JS中的异步以及如何异步。
    2016-08-08
  • 简单聊聊TypeScript只读修饰符

    简单聊聊TypeScript只读修饰符

    有的时候我们希望对类成员(属性,方法)进行一定的访问控制,来保证数据的安全,通过类修饰符可以做到这一点,目前typescript提供了四种修饰符,这篇文章主要给大家介绍了关于TypeScript只读修饰符的相关资料,需要的朋友可以参考下
    2022-04-04
  • ajax跨域调用webservice的实现代码

    ajax跨域调用webservice的实现代码

    这篇文章主要介绍了 ajax跨域调用webservice服务例子和理解,最近ajax访问webservice遇到跨域的问题,网上搜索资料,总结如下
    2016-05-05
  • js程序中美元符号$是什么

    js程序中美元符号$是什么

    $符号在php中是表示变量的特征字符, 在js中它也有很多作用, 一般我们用来命名一个函数名称,获取id的
    2008-06-06
  • 解析javascript图片懒加载与预加载的分析总结

    解析javascript图片懒加载与预加载的分析总结

    本篇文章介绍了javascript图片懒加载与预加载的分析,详细的介绍了懒加载和预加载的问题,有需要的可以了解一下。
    2016-10-10
  • js实现人民币大写金额形式转换

    js实现人民币大写金额形式转换

    这篇文章主要为大家详细介绍了js实现人民币大写金额形式转换的相关资料,需要的朋友可以参考下
    2016-04-04
  • Promise扫盲贴

    Promise扫盲贴

    这篇文章主要介绍了Promise扫盲贴,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • javascript实现前端分页效果

    javascript实现前端分页效果

    这篇文章主要为大家详细介绍了javascript实现前端分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论