# 加载器

## loader

## 插件加载器类型
|类型名称|加载器|
|:---|:---|
|3dm|Rhino3dmLoader|
|font|FontLoader|
|lut3dl|LUT3dlLoader|
|tilt|TiltLoader|
|3mf|ThreeMFLoader|
|gcode|GCodeLoader|
|lutcube|LUTCubeLoader|
|materialx|MaterialXLoader|
|hdr|RGBELoader（three r185 中是 `HDRLoader` 的弃用别名，加载时会打印 deprecated 警告）|
|usdz|USDZLoader|
|amf|AMFLoader|
|lwo|LWOLoader|
|nrrd|NRRDLoader|
|stl|STLLoader|
|vox|VOXLoader|
|bvh|BVHLoader|
|hdrcube|HDRCubeTextureLoader|
|logluv|LogLuvLoader|
|wrl|VRMLLoader|
|dae|ColladaLoader|
|ies|IESLoader|
|lottie|LottieLoader|
|pcd|PCDLoader|
|3ds|TDSLoader|
|vtk|VTKLoader|
|kmz|KMZLoader|
|md2|MD2Loader|
|pdb|PDBLoader|
|tga|TGALoader|
|xyz|XYZLoader|
|mdd|MDDLoader|
|ply|PLYLoader|
|tif|TIFFLoader|
|exr|EXRLoader|
|mpd|LDrawLoader|
|mmd|MMDLoader|
|pvr|PVRLoader|
|ttf|TTFLoader|

> `ktx2` 为内置格式（`KTX2Loader`，GLTF 内的 KTX2 纹理同样已接好），无需加载插件。
> `hdr` 同样已内置（资源管理器自带 `HDRLoader`），一般无需加载插件；插件表里的 `hdr→RGBELoader` 只是旧名。

## 使用

加载插件 `ResManager.loadExtensionLoader()`
```js
await vjmap3d.ResManager.loadExtensionLoader();
 let ent = await vjmap3d.ResManager.loadModel(env.assetsPath + "models/fbx/nurbs.fbx", {
    splitSubEntity: true,
    anchor: "front-bottom-right",
    position: [-2, 0, 2],
    size: 5
});
ent.addTo(app);
```
<mapFrame>
<pre>
let svc = new vjmap3d.Service(env.serviceUrl, env.accessToken);
let app = new vjmap3d.App(svc, {
container: "map", // 容器id
    scene: {  // 场景设置
        gridHelper: { visible: true } // 是否显示坐标网格
    }
})
await vjmap3d.ResManager.loadExtensionLoader();
 let ent = await vjmap3d.ResManager.loadModel(env.assetsPath + "models/fbx/nurbs.fbx", {
    splitSubEntity: true,
    anchor: "front-bottom-right",
    position: [-2, 0, 2],
    size: 5,
    // fileType: "fbx" // 如果资源路径后面不是fbx时，需指定类型，否则自动判断 
});
ent.addTo(app);
</pre>
</mapFrame>


## ifcloader


加载插件 `ResManager.loadExtensionIfcLoader()`
```js
await vjmap3d.ResManager.loadExtensionIfcLoader()
let ent = await vjmap3d.ResManager.loadModel(env.assetsPath + "models/model.ifc", {
    splitSubEntity: false,
    position: [0, 0, 0]
});
ent.addTo(app);
```
<mapFrame>
<pre>
let svc = new vjmap3d.Service(env.serviceUrl, env.accessToken);
let app = new vjmap3d.App(svc, {
container: "map", // 容器id
    scene: {  // 场景设置
        gridHelper: { visible: true } // 是否显示坐标网格
    }
})
await vjmap3d.ResManager.loadExtensionIfcLoader()
let ent = await vjmap3d.ResManager.loadModel(env.assetsPath + "models/model.ifc", {
    splitSubEntity: false,
    position: [0, 0, 0]
});
ent.addTo(app);
app.cameraControl.loadState({
    cameraTarget: new THREE.Vector3(0.3284790969323134,1.8240027596797397e-20, 1.6326208403110127),
    cameraPosition: new THREE.Vector3(0.9768856247903213,0.5587020679946232, 6.629605159565004)
})
</pre>
</mapFrame>