217 lines
5.2 KiB
Markdown
217 lines
5.2 KiB
Markdown
# 模型管理 API 使用示例
|
||
|
||
## API 说明
|
||
|
||
### 1. 添加模型
|
||
|
||
```javascript
|
||
// 添加带有 rotation 控制类型的模型
|
||
kernel.model.add({
|
||
modelId: "卷帘大",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/卷帘大.glb",
|
||
modelControlType: "rotation"
|
||
});
|
||
|
||
// 添加带有 color 控制类型的模型
|
||
kernel.model.add({
|
||
modelId: "小桌",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/小桌.glb",
|
||
modelControlType: "color"
|
||
});
|
||
|
||
// 添加不带控制类型的模型
|
||
kernel.model.add({
|
||
modelId: "框架",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/框架.glb"
|
||
});
|
||
```
|
||
|
||
### 2. 替换模型
|
||
|
||
```javascript
|
||
// 替换模型并指定控制类型
|
||
kernel.model.replace({
|
||
modelId: "卷帘大",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/新卷帘.glb",
|
||
modelControlType: "rotation"
|
||
});
|
||
```
|
||
|
||
### 3. 模型变换 (Transform)
|
||
|
||
```javascript
|
||
// 设置模型旋转 - 直接使用角度(默认)
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 0, y: 90, z: 0 } // 绕Y轴旋转90度
|
||
});
|
||
|
||
// 更多角度示例
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 0, y: 180, z: 0 } // 旋转180度
|
||
});
|
||
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 45, y: 90, z: 0 } // X轴45度,Y轴90度
|
||
});
|
||
|
||
// 如果需要使用弧度,设置 useDegrees: false
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 0, y: Math.PI / 2, z: 0 },
|
||
useDegrees: false
|
||
});
|
||
|
||
// 设置模型位置
|
||
kernel.transform.position({
|
||
modelId: "小桌",
|
||
vector3: { x: 10, y: 0, z: 5 }
|
||
});
|
||
|
||
// 设置模型缩放
|
||
kernel.transform.scale({
|
||
modelId: "框架",
|
||
vector3: { x: 1.5, y: 1.5, z: 1.5 } // 放大1.5倍
|
||
});
|
||
```
|
||
|
||
### 4. 点击事件回调
|
||
|
||
```javascript
|
||
kernel.on('model:click', (data) => {
|
||
console.log('点击的网格名称:', data.meshName);
|
||
console.log('点击的网格对象:', data.pickedMesh);
|
||
console.log('点击的3D坐标:', data.pickedPoint);
|
||
console.log('材质名称:', data.materialName);
|
||
console.log('模型控制类型:', data.modelControlType); // 'rotation' | 'color' | undefined
|
||
|
||
// 根据控制类型执行不同操作
|
||
if (data.modelControlType === 'rotation') {
|
||
console.log('这是一个可旋转的模型');
|
||
// 执行旋转相关操作 - 直接使用角度
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 0, y: 180, z: 0 }
|
||
});
|
||
} else if (data.modelControlType === 'color') {
|
||
console.log('这是一个可改变颜色的模型');
|
||
// 执行颜色相关操作
|
||
kernel.material.color(data.materialName, '#FF0000');
|
||
}
|
||
});
|
||
```
|
||
|
||
## ModelControlType 说明
|
||
|
||
- `rotation`: 表示该模型支持旋转控制
|
||
- `color`: 表示该模型支持颜色控制
|
||
- `undefined`: 未指定控制类型
|
||
|
||
## 完整示例
|
||
|
||
```javascript
|
||
import { kernel } from './index.js';
|
||
|
||
const config = {
|
||
container: document.querySelector('#renderDom'),
|
||
modelUrlList: [],
|
||
env: {
|
||
envPath: 'https://sdk.zguiy.com/resurces/hdr/hdr.env',
|
||
intensity: 1.2,
|
||
rotationY: 0.3,
|
||
background: true
|
||
},
|
||
};
|
||
|
||
kernel.init(config);
|
||
|
||
// 添加多个模型
|
||
kernel.model.add({
|
||
modelId: "框架",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/框架.glb"
|
||
});
|
||
|
||
kernel.model.add({
|
||
modelId: "卷帘大",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/卷帘大.glb",
|
||
modelControlType: "rotation"
|
||
});
|
||
|
||
kernel.model.add({
|
||
modelId: "小桌",
|
||
modelUrl: "https://sdk.zguiy.com/resurces/model/小桌.glb",
|
||
modelControlType: "color"
|
||
});
|
||
|
||
// 模型加载完成后设置变换
|
||
kernel.on('model:loaded', () => {
|
||
// 设置初始位置
|
||
kernel.transform.position({
|
||
modelId: "小桌",
|
||
vector3: { x: 5, y: 0, z: 0 }
|
||
});
|
||
|
||
// 设置初始旋转 - 直接使用角度
|
||
kernel.transform.rotation({
|
||
modelId: "卷帘大",
|
||
vector3: { x: 0, y: 45, z: 0 }
|
||
});
|
||
|
||
// 设置缩放
|
||
kernel.transform.scale({
|
||
modelId: "框架",
|
||
vector3: { x: 1.2, y: 1.2, z: 1.2 }
|
||
});
|
||
});
|
||
|
||
// 监听点击事件
|
||
kernel.on('model:click', (data) => {
|
||
console.log('模型点击数据:', data);
|
||
|
||
if (data.modelControlType === 'rotation') {
|
||
// 处理旋转逻辑 - 每次点击旋转45度
|
||
kernel.transform.rotation({
|
||
modelId: data.meshName,
|
||
vector3: { x: 0, y: 45, z: 0 }
|
||
});
|
||
} else if (data.modelControlType === 'color') {
|
||
// 处理颜色变更逻辑
|
||
kernel.material.color(data.materialName, '#FF0000');
|
||
}
|
||
});
|
||
```
|
||
|
||
## Transform API 详细说明
|
||
|
||
### rotation - 旋转
|
||
- 参数:`{ modelId: string, vector3: { x, y, z }, useDegrees?: boolean }`
|
||
- **默认使用角度**:直接传递 90、180 等角度值
|
||
- 如需使用弧度,设置 `useDegrees: false`
|
||
- 示例:
|
||
```javascript
|
||
// 使用角度(默认,推荐)
|
||
kernel.transform.rotation({
|
||
modelId: "model1",
|
||
vector3: { x: 0, y: 90, z: 0 }
|
||
});
|
||
|
||
// 使用弧度
|
||
kernel.transform.rotation({
|
||
modelId: "model1",
|
||
vector3: { x: 0, y: Math.PI / 2, z: 0 },
|
||
useDegrees: false
|
||
});
|
||
```
|
||
|
||
### position - 位置
|
||
- 参数:`{ modelId: string, vector3: { x, y, z } }`
|
||
- 单位:场景单位
|
||
- 坐标系:右手坐标系(X右,Y上,Z前)
|
||
|
||
### scale - 缩放
|
||
- 参数:`{ modelId: string, vector3: { x, y, z } }`
|
||
- 单位:倍数(1.0 = 原始大小)
|
||
- 可以设置不同轴向的缩放比例
|