最近在做VR方面的研究,看到了Google Cardboard对传感器处理的代码,对旋转矩阵、罗德里格公式做了一些研究。
罗德里格公式是计算三维空间中,一个向量绕旋转轴旋转给定角度以后得到的新向量的计算公式,具体的详细推导可以看维基,我觉得只要能知道如何使用就可以了,注意旋转轴为单位向量,来计算旋转矩阵。
https://en.wikipedia.org/wiki/Rotation_matrix
http://mathworld.wolfram.com/RodriguesRotationFormula.html

下面是Google Cardboard中罗德里格公式代码:

    public static void sO3FromMu(Vector3d w, Matrix3x3d result) {double kA;double kB;double thetaSq = Vector3d.dot(w, w);double theta = Math.sqrt(thetaSq);if (thetaSq < 1.0E-8) {kA = 1.0 - 0.1666666716337204 * thetaSq;kB = 0.5;} else if (thetaSq < 1.0E-6) {kB = 0.5 - 0.0416666679084301 * thetaSq;kA = 1.0 - thetaSq * 0.1666666716337204 * (1.0 - 0.1666666716337204 * thetaSq);} else {double invTheta = 1.0 / theta;kA = Math.sin(theta) * invTheta;kB = (1.0 - Math.cos(theta)) * (invTheta * invTheta);}So3Util.rodriguesSo3Exp(w, kA, kB, result);}private static void rodriguesSo3Exp(Vector3d w, double kA, double kB, Matrix3x3d result) {double wx2 = w.x * w.x;double wy2 = w.y * w.y;double wz2 = w.z * w.z;result.set(0, 0, 1.0 - kB * (wy2 + wz2));result.set(1, 1, 1.0 - kB * (wx2 + wz2));result.set(2, 2, 1.0 - kB * (wx2 + wy2));double a = kA * w.z;double b = kB * (w.x * w.y);result.set(0, 1, b - a);result.set(1, 0, b + a);a = kA * w.y;b = kB * (w.x * w.z);result.set(0, 2, b + a);result.set(2, 0, b - a);a = kA * w.x;b = kB * (w.y * w.z);result.set(1, 2, b - a);result.set(2, 1, b + a);}

代码中罗德里格变换矩阵为:

KA和KB两个参数在陀螺仪静态状态下,(x,y,z)角速度极小条件下做了修正,效果应该是能够增强画面移动的稳定性,这个还有待测试。
这里为了计算方便有个推导公式:

这样就和上面公式一样了。

VR开发-罗德里格公式的研究相关推荐

  1. Google VR开发-Cardboard VR SDK头部追踪实现(罗德里格旋转公式)

    一.罗德里格旋转公式 可以参考百度百科和维基百科进行了解. 概括来说就是罗德里格旋转公式就是用来求旋转后新向量的公式: 而这个公式可以转换成矩阵形式: 公式各部分的几何意义和推导原理参考下图 这个图证 ...

  2. 【VR开发篇】Unity3D 使用物理公式实现抛物线传送功能

    [VR开发篇]Unity3D 使用物理公式实现抛物线传送功能 发布时间:2021/03/22 作者:七夜丶 文章目录 [VR开发篇]Unity3D 使用物理公式实现抛物线传送功能 前言 一.前期准备 ...

  3. 《AR与VR开发实战》——第1章AR技术简介

    本节书摘来自华章出版社<AR与VR开发实战>一书中的第1章,第1.1节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1章 AR ...

  4. 我是如何“0基础”掌握VR开发技术的

    初学某项技术的朋友,通常会提出这样一个标准问题:我需要多长时间才能够掌握这项技术? 这个问题通常没有标准答案.但是我仍将试着通过本文来解答一下,因为在与学员沟通的过程中,我已经无数次被问到过这样的问题 ...

  5. 【狂云歌之unity_vr】VR开发中的优化

    [狂云歌之unity_vr]VR开发中的优化 前言 大概做了大半年的VR开发,HTCVive上与room scale和手柄控制器.激光相关的开发做过,gearvr使用oculus sdk开发做过,使用 ...

  6. Unity VS Unreal: 哪个更适合AR/VR开发?

    之前三次方有比较过关于Unity与Unreal(深度分析 | Unity和Unreal的比较),主要是从宏观角度(偏游戏应用)来分析的,对于ARVR开发,到底选择哪一个好?使用两个引擎分别开发的代表性 ...

  7. 程序员2016年5月:走进VR开发世界

    时至今日,VR技术仍处在一个萌芽期,Oculus.Gear VR.PlayStation VR在经过长时间的精细打磨后才逐渐为大众所触知.在硬件升级的同时,对于以游戏为主的内容开发而言,核心即在于Un ...

  8. 【VR开发】Unity开发VR时的基本设置

    [背景]Unity对VR的支持个人感觉要由于虚幻引擎,但尽管如此,设置上还是需要花一番功夫研究.好在Unity推出了统一平台的VR集成插件,通过包含该插件的设置,通过Unity开发的VR游戏可以同时支 ...

  9. 视频教程-虚幻4 VR开发指南-其他

    虚幻4 VR开发指南 房燕良,从2001年开始,自主研发3代游戏引擎,发布游戏超过10款.代表作品有<仙剑3><功夫世界><龙online><神兵传奇> ...

最新文章

  1. 使用Git分布式版本控制系统
  2. java中可用于定义成员常量_13秋北航《Java语言与面向对象程序设计》在线作业三辅导 …...
  3. 论文笔记之:End-to-End Localization and Ranking for Relative Attributes
  4. 038_JDK的Iterable接口
  5. 使用dumpsys检测Activity任务栈
  6. 字体大小的设置_ios 设置的字体大小与实际的字体大小不一致
  7. WACV 2021 开幕,更偏重技术应用,附论文下载
  8. Rails secret token bug
  9. 神策2021秋招数据分析笔试
  10. js获取时间戳的几种方式
  11. 前端页面加蒙版的几种方法
  12. Flutter混编工程之高速公路Pigeon
  13. 【前端】移动互联动画
  14. SAP RETAIL 执行事务代码WRP1,报错-Transaction WRP1 cannot be executed-
  15. ArcGIS模拟风场(流场)
  16. python 头条号_python爬取今日头条收藏目录
  17. 如果你已经这样了,那你必须要跳槽了。
  18. iOS设计:绘图及性能
  19. 如何快速开发安卓app? 用传统的编程工具不行,试试猎码中文开发!
  20. 滑动平均滤波/递推平均滤波算法

热门文章

  1. 基于SABR模型的期权波动率曲线套利策略
  2. AI智能生图技术的未来趋势
  3. fatal: bad boolean config value ‘“false”‘ for ‘http.sslverify
  4. HIVE常用参数配置
  5. 使用Django Highcharts制作图表
  6. 体验DCGAN生成漫画头像
  7. caffe入门学习:caffe.Classifier的使用
  8. R 用回归来做 ANOVA
  9. 如何解决MacBook休眠时耗电过大的问题
  10. OpenGL学习笔记:光照贴图