项目场景:
获取到一组由机器自动识别的cad点位数据,需要映射到ue场景里,将这些点位标识出来
问题描述
直接将点位映射,通过transform变换,无法直接映射到正确的场景位置上
原因分析:
因为cad是用的是右手坐标系,而ue用的是左手坐标系,所以在转换的时候需要将坐标系统一 右手坐标系转左手坐标系 将数据VV(1,-1,1) 单位也是需要注意的,我这里cad数据单位是mm,ue是cm 所以要cad点位数据需要0.1
解决方案:
暂时两种解决方案
- 用子组件与父组件的关系来获取相对位置
- 用点位数据的映射关系:scale、rotation、 location offset来反推
首先,确定好换算的actor的位置,必须为 接收到的数据的计算原点 如图,这个是数据来源的原点
一 子父组件关系
- 在Actor中创建两组子组件组,一组是参考点原始位置数据,一组是映射到ue场景的位置数据
- 将参考点 ABCD在场景中的位置 A1 B1 C1 D1 摆好,这里用蓝色球标识
- 回到编辑器 ,通过调整SceneSource的transform面板,将位置与SceneReference贴合
PS:只能通过修改SceneSource来贴合场景的位置,并且顺序需要一样,改旋转旋转,该乘-1的乘-1,由于这里需要右手坐标系转左手坐标系,所以在scale里乘了 -1 - 看到sceneSource下的cube了吗,这个是为了动态设置位置,然后通过它获取世界位置的,这里写了个方法,方便调用
- 直接输入获取的原始数据,转换好之后就是ue的世界位置了
点位数据映射
- 与父子组件做法一样,做四个参考点在ue世界的位置,注意顺序需要一致
- 计算长度倍数,绕z轴旋转量(yaw),以及两个向量的偏移量
- 封装一个转换函数,通过上一步计算的倍数,旋转量以及偏移量,反推并转换成世界坐标
- 直接输入获取的原始数据,转换好之后就是ue的世界位置了
|