此技能用于系统化处理 Three.js 项目中 3D 模型的坐标系转换和调试问题,特别适用于水利三维可视化场景。
目标: 确定模型来源和坐标系差异
步骤:
识别模型来源软件:
检查模型问题:
收集调试信息:
coordinateDebug.ts 中的工具目标: 使用正确的参数进行坐标系转换
步骤:
选择转换函数:
import { convertCoordinateSystem } from '../utils/coordinateConverter'
确定转换参数:
from: 源坐标系('z-up', 'y-up', 'z-up-forward-x')to: 目标坐标系(默认 'y-up')rotationOption: 旋转选项
'standard': 标准旋转'flipped': 翻转旋转(解决倒置问题)'180': 180度旋转应用转换:
const convertedModel = convertCoordinateSystem(
model,
'z-up', // Blender 默认
'y-up', // Three.js 默认
'flipped' // 如果模型倒置
)
目标: 验证转换效果和渲染质量
步骤:
坐标调试:
showCoordinatePanel 查看拾取坐标cameraInfo 验证相机位置coordinateDebug.ts 工具验证转换渲染验证:
性能检查:
症状: 模型上下颠倒 解决方案:
convertCoordinateSystem(model, 'z-up', 'y-up', 'flipped')
症状: 模型前后左右方向错误 解决方案:
// 尝试不同的旋转选项
convertCoordinateSystem(model, 'z-up', 'y-up', 'standard')
convertCoordinateSystem(model, 'z-up', 'y-up', '180')
症状: 水面材质不显示或显示异常 解决方案:
import * as THREE from 'three'
import { convertCoordinateSystem } from '../utils/coordinateConverter'
// 加载模型
const loader = new GLTFLoader()
loader.load('model.glb', (gltf) => {
const model = gltf.scene
// 转换坐标系(Blender → Three.js)
const convertedModel = convertCoordinateSystem(
model,
'z-up',
'y-up',
'flipped' // 如果模型倒置
)
// 添加到场景
scene.add(convertedModel)
})
import { showCoordinateInfo, showCameraInfo } from '../utils/coordinateDebug'
// 显示坐标信息
showCoordinateInfo(pickedPosition.value)
// 显示相机信息
showCameraInfo(cameraInfo.value)
convertCoordinateSystem: 坐标系转换核心函数coordinateDebug.ts: 调试工具集合Scene3D.vue: 3D 场景组件(包含调试面板)sceneConfig.ts: 场景配置和材质参数coordinateConverter.ts: 坐标系转换矩阵定义此技能将帮助用户: