quat的坐标系转换
来源:互联网 发布:爱卡汽车软件下载 编辑:程序博客网 时间:2024/05/19 09:12
oculus获取的pose数据包含坐标和四元数信息,但所处的坐标系和CryEngine坐标系不同
oculus坐标系 :+x向右,+y向上,+z向外(屏幕外)
cryengine坐标系:+x向右,+y向内(屏幕以内),+z向上
所以需要使用Oculus时,获取的相机位置和四元数都需要进行转换。
坐标转换比较好理解:将z轴和y轴对调再取反即可
Vec3 Device::HmdVec3ToWorldVec3(const Vec3 &vec)
{
// 将oculus的y替换到CryEngine的z,将oculus的z取反,替换CryEngine的y
return Vec3(vec.x, -vec.z, vec.y);
}
// 以下代码来自CryEnginev5
// -------------------------------------------------------------------------
// 四元数转换,需要考虑两方面:
其一,数值和变换的坐标轴对应;
其二,变换的坐标轴正确。
比较费解的就是为什么要旋转坐标系,个人理解为:
第一步将数值对调,只保证了各个分量所在的x、y、z轴的分量值正确,但oculus和CryEngine原来各自坐标系统下的轴不一致,
经过第一步操作后,作用到模型上后,只是将模型旋转的角度正确了,但默认的相机朝向却不同,需要将oculus的相机朝向和
CryEngine的相机朝向统一为相同方向。
Quat Device::HmdQuatToWorldQuat(const Quat &quat)
{
Matrix33 m33(quat);
Vec3 column1 = -quat.GetColumn2(); // 取出四元数的z变换分量,
m33.SetColumn2(m33.GetColumn1()); // 取出四元数的y变换分量,作为CryEngine的z分量
m33.SetColumn1(column1);// 将oculus取反后的z分量,作为CryEngine的y分量
return Quat::CreateRotationX(gf_PI * 0.5f) * Quat(m33); // 将坐标系从oculus坐标系变换到CryEngine坐标系,以便使其相机朝向一致。
}
- quat的坐标系转换
- 坐标系的转换
- 平面的坐标系转换
- 坐标系的转换
- ios 坐标系的转换
- 坐标系的转换
- 转换控件的坐标系
- iOS坐标系的转换
- 坐标系的转换
- 二维坐标系的转换
- 坐标系之间的转换
- cocos2d-x的坐标系转换
- 两个坐标系间的转换
- openGL 坐标系的互相转换
- iOS 地图坐标系的转换
- 经验之谈—坐标系的转换
- OpenGL坐标系之间的转换
- 几大坐标系的转换
- 如何利用dex2jar反编译APK及代码混淆
- pid_t的类型定义(创建进程时用到)
- Understanding glibc malloc
- iOS开发:关于屏幕旋转问题
- Launcher3 Workspace的高度调节
- quat的坐标系转换
- 欢迎使用CSDN-markdown编辑器
- Linux堆内存管理深入分析
- nyoj 737 石子合并(一) 区间dp
- android 资源的整合(待续)
- Unshelve Instance 操作详解 - 每天5分钟玩转 OpenStack(39)
- POJ3625 Building Roads
- 跳表Java实现
- vim打开文件时提示Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded.