最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

three.js?Mool3D模型類的使用

 更新時間:2023年03月31日 16:33:09   作者:Mool  
這篇文章主要為大家介紹了three.js?Mool3D模型類的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Model類

之前的引擎介紹文章中有人留言想了解如何通過引擎加載自定義的模型場景,這篇文章將詳細介紹如何加載場景及場景配置文件的說明~

場景加載

加載場景主要使用引擎中的model類來實現(xiàn),引擎中model類主要功能有配置文件模型加載、場景切換、單一自定義模型加載、場景下動畫的控制等~

//下方為簡單場景的加載
import { Viewer } from "../Threejs/index";
export class Index extends Viewer {
  constructor(options) {
    super(options);
    this.initModel();
  }
}

推薦通過繼承主類的方式擴展業(yè)務(wù)代碼,上方是一個最簡單的場景加載示例。細心的同學(xué)可以發(fā)現(xiàn)上方只是初始化了一個model類而已如何完成場景的加載的,當然完成場景加載還需要一個觸發(fā)場景的條件,這我們通??梢栽谌萜魑募袑崿F(xiàn)。下方就是最簡單的場景加載容器

//vue文件
//初始化
const init = () => {
  const el = refmap.value;
  sceneA = new Index({
    el: el as HTMLElement,
    tween: TWEEN,
    path: "../public/scene/", //基礎(chǔ)路徑
  });
  setScene(1);
};
//切換場景
const setScene = (id) => {
  switch (id) {
    case 1:
      sceneA.setScene(1, () => {
          //場景加載成功回調(diào)
      });
      sceneA.flyTo({ //相機位置
        position: [0, 5, 6],
        controls: [0, 0, 0],
        duration: 2000,
      });
      break;
    default:
      break;
  }
};

場景配置文件

上方代碼通過場景id加載場景,那是如何知道需要加載哪些模型呢?引擎通過config.json文件約束不同場景下所依賴的模型文件,配置文件存放路徑為基礎(chǔ)路徑下(../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"
      }
    ]
  }
  ......
]

遞歸處理場景模型

照著上方的操作,我們完成了場景的加載。這時場景已經(jīng)呈現(xiàn)在畫面上,如果我們需要修改場景模型的材質(zhì)等操作怎么做呢? 當然模型類中也考慮到這一點,提供了一個回調(diào)處理解碼的模型,具體怎么操作見下方~

constructor(options) {
    super(options);
    this.initModel();
    //這是在加載場景模型之前執(zhí)行的回調(diào),所以建議放在初始化類時完成回調(diào)的注冊,這樣會在模型加載過程中遞歸去修改模型
    this.model.deepFunction.push(({ e , item }) => {
     // e:模型碎片Mesh / item:場景配置文件
      e.scale.set(300, 300, 300);
    });
}

不推薦什么方法都放在constructor中去調(diào)用,由于模型加載時才會去設(shè)置當前場景的id,如在constructor中初始化天空和燈光等,會出現(xiàn)無效的情況,出現(xiàn)這種情況是因為場景id默認值為1,都加載到場景1中去了。所以模型類提供一個場景加載成功的回調(diào),在里面初始化場景需要的一些修飾類如燈光、天空、環(huán)境貼圖等~

sceneA.setScene(1, () => {
    //場景加載成功回調(diào)
    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:模型動畫
     ...模型自定義修改
  }
);

注意上方只提供加載模型,不會主動添加到場景中,需修改定制化模型參數(shù)之后手動將其add到場景中~

動畫

模型類中提供兩種執(zhí)行動畫的方法,一種是執(zhí)行場景下的所有動畫,一種是執(zhí)行某個名稱的動畫。具體使用見下方說明~

//執(zhí)行場景下的所有動畫
this.model.playAllClipes(this.sceneidx);//傳入場景的id
//執(zhí)行某名稱的動畫
this.model.playNameClipes(this.sceneidx,'mool');//傳入場景的id和動畫名稱

結(jié)語

本文為Mool3D引擎下的模型類的介紹和使用,主要設(shè)計思想是通過配置文件完成場景加載,提供自定義模型的加載和場景動畫的控制。

更多關(guān)于three.js Mool3D模型類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS修改iframe頁面背景顏色的方法

    JS修改iframe頁面背景顏色的方法

    這篇文章主要介紹了JS修改iframe頁面背景顏色的方法,涉及javascript操作iframe頁面樣式的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • JavaScript 參數(shù)中的數(shù)組展開 [譯]

    JavaScript 參數(shù)中的數(shù)組展開 [譯]

    有些時候,我們需要把一個數(shù)組展開成多個元素,然后把這些元素作為函數(shù)調(diào)用的參數(shù).JavaScript中可以使用Function.prototype.apply來實現(xiàn)這種展開操作,但它不能被應(yīng)用在執(zhí)行構(gòu)造函數(shù)的情況下.本文解釋了什么是展開操作以及如何在使用new運算符的同時進行展開操作
    2012-09-09
  • JavaScript中合并數(shù)組的N種方法

    JavaScript中合并數(shù)組的N種方法

    這篇文章主要介紹了JavaScript中合并數(shù)組的N種方法,本文使用concat、循環(huán)插入、reduce等方法合并JavaScript數(shù)組,需要的朋友可以參考下
    2014-09-09
  • 詳解如何利用chatgpt保護您的js代碼

    詳解如何利用chatgpt保護您的js代碼

    這篇文章主要為大家介紹了如何利用chatgpt保護您的js代碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • JavaScript利用Immerjs實現(xiàn)不可變數(shù)據(jù)

    JavaScript利用Immerjs實現(xiàn)不可變數(shù)據(jù)

    Immerjs?是一個用于管理?JavaScript?不可變數(shù)據(jù)結(jié)構(gòu)的庫,它可以幫助我們更輕松地處理狀態(tài)的變化,并減少冗余代碼。本文就來帶大家揭秘如何利用Immerjs實現(xiàn)不可變數(shù)據(jù),感興趣的可以了解一下
    2023-04-04
  • JS實現(xiàn)無縫循環(huán)marquee滾動效果

    JS實現(xiàn)無縫循環(huán)marquee滾動效果

    這篇文章主要為大家詳細介紹了JS實現(xiàn)無縫循環(huán)marquee滾動效果,兼容IE, FireFox, Chrome,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 用JavaScript動態(tài)建立或增加CSS樣式表的實現(xiàn)方法

    用JavaScript動態(tài)建立或增加CSS樣式表的實現(xiàn)方法

    下面小編就為大家?guī)硪黄肑avaScript動態(tài)建立或增加CSS樣式表的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • js中g(shù)etBoundingClientRect的作用及兼容方案詳解

    js中g(shù)etBoundingClientRect的作用及兼容方案詳解

    這篇文章主要介紹了js中g(shù)etBoundingClientRect的作用及兼容方案詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 小程序簡單兩欄瀑布流效果的實現(xiàn)

    小程序簡單兩欄瀑布流效果的實現(xiàn)

    這篇文章主要介紹了小程序簡單兩欄瀑布流效果的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-12-12
  • 小程序?qū)崿F(xiàn)人臉識別的項目實踐

    小程序?qū)崿F(xiàn)人臉識別的項目實踐

    人臉識別在現(xiàn)在很多地方都可以用的到,例如支付,解鎖等,本文就來介紹一下小程序?qū)崿F(xiàn)人臉識別,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10

最新評論

辽宁省| 肥乡县| 辛集市| 法库县| 桂平市| 大英县| 邯郸市| 淮北市| 浮山县| 永德县| 株洲市| 昌宁县| 日土县| 长寿区| 铜川市| 定安县| 吕梁市| 太原市| 泽州县| 襄汾县| 长子县| 宿迁市| 东丽区| 井陉县| 长顺县| 拉萨市| 喜德县| 潞城市| 民勤县| 贵港市| 金溪县| 庄河市| 麟游县| 远安县| 星子县| 凤城市| 金川县| 江北区| 襄城县| 吴江市| 兰州市|