libgdx 中四元数的 euler getPitch()、getRoll()、getYaw() 的旋转顺序?

2024-02-02

将四元数转换为欧拉角时,通常必须有轴旋转的顺序,例如这种可视化。 http://quaternions.online/

libgdx 是如何工作的?

四元数类具有以下功能

getRoll():

Math.asin(MathUtils.clamp(2f * (w*x - z * y), -1f, 1f)) : 
     (float)pole * MathUtils.PI * 0.5f;`

getPitch():

Math.asin(MathUtils.clamp(2f * (w*x - z * y), -1f, 1f)) : 
     (float)pole * MathUtils.PI * 0.5f;`

getYaw():
`
MathUtils.atan2(2f * (y * w + x * z), 1f - 2f * (y * y + x * x)) : 0f;`

结果角度集的顺序在哪里,哪个轴首先旋转,第二个,第三个?

How are these functions related to a quaternion rotation matrix like: enter image description here

为什么这个旋转矩阵经常被给出为逆/转置(由于正交性而相等)?


轮换顺序

使用角度三元组进行定向有 12 种可能的旋转顺序。

其中六个称为真欧拉角,其余六个称为泰特-布莱恩角。

在这里阅读更多内容 https://en.wikipedia.org/wiki/Euler_angles

Libgdx 使用以下顺序。

  1. 绕 Y 偏航旋转
  2. 向 Y 方向倾斜提升
  3. 围绕获得的方向滚动旋转

旋转矩阵

旋转矩阵、四元数、欧拉角和轴角表示是编码旋转/方向的不同方式。

他们经常在存储空间和计算成本之间进行权衡。

它们可以通过明确定义的方程(您提到的其中之一)自由地相互转换。所以这些转换表达式是相互关联的。


Edit感谢您指出错误。它确实是关于 Y 轴而不是 Z 轴。

我已经从源代码 https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/math/Quaternion.java.


Libgdx 使用坐标系 http://bulletphysics.org/mediawiki-1.5.8/index.php/Coordinate_system子弹物理引擎。在该系统中,XZ 平面被视为水平,Y 平面被视为向上(而不是 Z)。这就是我错误的根源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libgdx 中四元数的 euler getPitch()、getRoll()、getYaw() 的旋转顺序? 的相关文章

  • 运行桌面版 libgdx 示例 gdx-invaders 时出现 java.lang.NoClassDefFoundError

    我正在构建 libgdx 的 gdx invaders 示例 有两个项目 gdx入侵者 基础项目 作为桌面 Java 应用程序运行gdx 入侵者 android项目 依赖于 gdx invaders 并作为 Android 应用程序运行 我
  • iOS 的 Libgdx 项目在模拟器上通过 robovm 编译时显示 libgdx 启动画面?

    如何删除出现在 iOS 模拟器上但未出现在 Android 模拟器中的 libgdx 启动画面 我正在通过 robovm 编译我的 libgdx 项目 Thanks 您将需要替换 RoboVM iOS 项目的 数据 文件夹中的各种 默认 图
  • 如何从旋转矩阵计算角度

    我使用单个对象的两个图像 该对象从第一个图像旋转一定角度 我计算了每个图像的姿势 并使用 Rodergues 将旋转向量转换为矩阵 现在我如何计算并查看它从第一个位置旋转了多少 我尝试了很多方法 但答案是否定的 编辑 我的相机是固定的 只有
  • 围绕相机旋转后的 Libgdx 坐标

    相机旋转后 坐标让我感到困惑 我有一台相机 一个角色和一张地图 该玩家仅沿以下方向行走 北 90 南 270 东 0 西 180 从玩家 camera rotateAround 的位置旋转相机后 玩家由于旋转而开始向新方向移动 有没有办法在
  • java- libgdx build.gradle 与 AdMob 不同

    我正在为 android 构建一个应用程序并使用 libGdx 我检查了一百万个关于如何添加 Admob 的教程 每个教程都要求调整 build gradle 文件 但我的文件与他们的文件不一样 他们有依赖项和不同的东西 知道如何在我的 b
  • LibGDX 路径 (CatmullRomSpline) 恒速

    我试图使用 LibGDX CatmullRomSpline 在路径上实现恒定速度 但在使其正常工作时遇到问题 我已经尝试对这个主题进行了很多研究 包括阅读 LibGDX wiki 但他们对实现恒定速度的解释并没有真正意义 我无法让他们的方法
  • 将glm四元数转换为旋转矩阵并与opengl一起使用

    所以我将对象的方向存储在 glm fquat 中 我想用它来旋转我的模型 我怎么做 我试过这个 glPushMatrix glTranslatef position x position y position z glMultMatrixf
  • 使用 libGDX 写入 Json

    我是 Json 和 libGDX 的新手 但我创建了一个简单的游戏 我想将玩家姓名及其分数存储在 Json 文件中 有没有办法做到这一点 我想创建一个 Json 文件Gdx files localStorage如果它不存在 如果存在 则向其
  • 我如何在 LibGDX 应用程序中找到软键盘的高度

    我正在开发一个Android游戏与LibGDX 我需要找到用户正在使用的软键盘的高度 因为我想在键盘正上方显示一些对象 我读过这个帖子 如何获取 Android 上的软键盘高度 https stackoverflow com questio
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • ProGuard SimException

    经过大约 4 个小时的随机尝试 我正在尝试让 ProGuard 正常工作 尝试让这个令人惊叹的软件正常工作 我的项目使用 LibGDX 和 KryoNet 这是我当前的 ProGuard 配置 verbose dontobfuscate d
  • 如何让用户从图库中选择一张图片在游戏中使用,LibGDX

    我是学习 LibGDX 的初学者 我正在 LibGDX 中开发我的第一个游戏 您可以用选定的图片 例如某人的头部 替换敌人的球 然后躲避敌人 在我的主菜单中 我有 stage2d 按钮 我想要一个按钮 让用户选择他想要在游戏中使用的图片 所
  • LibGDX纹理混合与OpenGL混合功能

    在 libGdx 中 我试图创建一个成形纹理 采用完全可见的矩形纹理并将其遮罩以获得成形纹理 如下所示 在这里我在矩形上测试它 但我想在任何形状上使用它 我调查过本教程 http www learnopengles com tag addi
  • 运行 libgdx html

    我正在尝试理解这个伟大的库 当我尝试使用 run as gt web 应用程序运行 html 时 出现错误 这是控制台文本和 gwt 定义文件 Loading modules com me mygdxgame GwtDefinition L
  • libGDX 中的奖励视频广告示例

    我一直在寻找例子 但没有找到 我发现一个没有 libgdx 的应用程序以及它无法工作的一些原因 但应用程序也没有崩溃 public class AndroidLauncher extends AndroidApplication imple
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • libgdx 贴花动态文本

    我正在 Libgdx 中开发 3D 2 5D 应用程序 我发现贴花对于此目的非常有用 在我的应用程序中应该有包含动态文本的图层 现在我想知道通过贴花绘制文本的最佳方法是什么 目前我的实现是基于将 BitmapFont 绘制到 FBO 然后在

随机推荐

  • PHP发送邮件附件

    我找到了post https stackoverflow com questions 3092821 php send e mail with attachment关于向邮件添加附件 问题是如何将上传的文件与该功能连接起来 我必须通过什么
  • 在执行测试之前等待自己的函数(返回一个承诺)

    我有自己的函数 调用测试控制器服务器来重置数据库 它返回一个承诺 该承诺在数据库成功重置后完成 function resetDatabase returns a promise for my REST api call 我的目标是能够在所有
  • 防止Python中的函数覆盖[重复]

    这个问题在这里已经有答案了 有什么方法可以防止子类覆盖基类中的方法吗 我的猜测是没有 但我来自 NET 世界 并且我正在努力使我的 API 尽可能强大 因此非常感谢任何输入 class Parent def do something sel
  • Angular 2 错误:尝试使用被破坏的视图:DetectChanges 错误:尝试使用被破坏的视图:ViewDestroyedError 处的 detectorChanges

    我正在使用 ng2 toastr 并收到以下错误 https www npmjs com package ng2 toastr https www npmjs com package ng2 toastr Attempt to use a
  • 如何防止请求返回304

    浏览器什么时候不向服务器发出文件请求 换句话说 我有一个正在提供服务的 JavaScript 文件 它的 HTTP 响应头有一个ETag Cache Control public and Expires Tue 19 Jan 2038 03
  • 如何解决 VS Code 不支持车把部分的问题?

    我使用车把作为我的项目的模板引擎 我正在使用 Prettier 进行格式化 但在格式化 hbs 文件期间我收到错误 SyntaxError 不支持车把部分 我尝试在互联网上寻找解决方案但失败了 这是完整的错误日志 SyntaxError 不
  • 断言两个 java bean 是等价的

    这个问题 https stackoverflow com questions 472626 how to generically compare entire java beans很接近 但仍然不是我想要的 我想以通用的方式断言两个 bea
  • 有没有办法让 ANT 任务在 Windows Vista 中以管理员身份运行?

    作为安装程序的一部分 我需要从 ANT 运行批处理文件 如果我以管理员身份运行 cmd exe 并运行批处理文件 一切都会很好 因为它具有适当的管理权限 当从 ant 执行批处理文件时 它会失败 就像我在没有管理权限的情况下运行批处理文件一
  • Angular 跨服务通信

    我有一个统计应用程序 在我的页面左侧有主题列表 顶部有组列表 主要部分包含与主题和组相关的统计项目 我还有几个服务为我的应用程序提供业务逻辑 为了简单起见 我们来谈谈其中的三个 主题服务 群组服务 and 统计服务 最终用户可以操作主题和组
  • 如何让 Android Studio 指向我的 SDK 源代码?

    Android Studio 调试器指向错误版本的 SDK 源代码 因此我无法单步执行系统代码 如何让它使用特定的 SDK 源路径 需要明确的是 它指向正确的 SDK 但 SDK 源代码的版本错误 16 而不是 17 提前致谢 这有点令人困
  • Magento:订购可配置产品后,由于缺货而被取消

    我的问题是 我有一个产品 里面有简单的产品 也许 T 恤白色尺码 S XL 和一些颜色 现在 如果我订购其中之一 则会通过订单确认电子邮件取消该订单 我认为这是库存的问题 但我不知道 每种商品有 99 种库存 全部已激活并准备发货 有谁遇到
  • NHibernate:多对多关系不起作用

    我有以下数据库架构 http lh4 ggpht com SDci0Pf3tzU SdM3XnAmmxI AAAAAAAAEps Ie3xW3ZVNfQ s400 styleerror png http picasaweb google c
  • 如何找出 Django 中出现的 500 错误?

    当我访问由 Django 生成的服务器上的 Django 应用程序中的页面 http 68 123 151 234 static quickstart html 时 该页面显示 A server error occurred Please
  • 无法在android的webview中使用javascript播放音频

    在 Android 手机上 当我在 html 文件中使用以下代码时 音频正在播放 但是当我删除 自动播放 属性时 我无法在 webview 上播放音频 有人有解决方案吗
  • 如何在 Oracle 中“打开”XML 数据

    下面是我想用 PL SQL 重写的一些 TSQL 的示例 DECLARE xml XML SET xml
  • 使用 ButterKnife 库在 1 个片段中包含 2 个不同的视图

    我目前正在尝试使用 Android 的 ButterKnife 库来处理一些样板代码 https github com JakeWharton butterknife https github com JakeWharton butterk
  • 如何跟踪用户在网站上的时间

    我希望跟踪用户在网站上的平均时间 与谷歌分析的方式相同 以进行内部管理 做到这一点最简单的方法是什么 您可以通过以下方式获取时间 用户访问您的网站后 将 cookie 中的当前时间保存为 已访问 并且在下次访问时您可以获取它 如果已设置 更
  • 同时滚动多个div

    我正在尝试滚动多个div同时 当我滚动其中一个时div 我想报告所有div中的滚动 我动态创建 div 所以我使用这个功能document getElementsByClassName sub category container得到我所有
  • 在网格视图内填充下拉列表

    我在 Gridview 中有一个下拉列表 我必须显示与每个 id 关联的记录 并且该 ID 包含超过 10 条记录 那么我如何显示它们 protected void GridView1 RowDataBound object sender
  • libgdx 中四元数的 euler getPitch()、getRoll()、getYaw() 的旋转顺序?

    将四元数转换为欧拉角时 通常必须有轴旋转的顺序 例如这种可视化 http quaternions online libgdx 是如何工作的 四元数类具有以下功能 getRoll Math asin MathUtils clamp 2f w