安卓。如何沿对象面向的方向移动对象(使用 Vector3 和四元数)

2024-03-20

我正在使用 libGDX(事实上对它来说相当新)和 Android。我想沿 3d 对象所面向的方向移动(使用一定的速度)。我认为这是一个基本问题,但找不到直接答案。我有一个代表对象旋转(方向)的四元数,有一个代表对象位置的 Vector3。问题是如何使用四元数中的信息更新位置 Vector3,以便沿四元数表示的方向移动对象。 (另一种方法是从四元数中提取横滚、俯仰和偏航,并通过应用三角计算获得新坐标。但我认为必须有一种方法可以使用 Vector3 和 Quat 来实现这一点。)


四元数用于指定旋转。您首先需要指定不应用旋转时的方向。例如,如果您想在不应用旋转时沿 X 轴移动:

Vector3 baseDirection = new Vector3(1,0,0);

确保基本方向已标准化(长度= 1),您可以使用nor()确保安全的方法:

Vector3 baseDirection = new Vector3(1,0,0).nor();

接下来,您需要使用四元数旋转方向:

Vector3 direction = new Vector3();
Quaternion rotation = your_quaternion;
direction.set(baseDirection);
direction.mul(rotation);

现在您已经有了方向,您可以根据想要移动的量来缩放它。您可能希望每一帧都执行此操作,具体取决于自上一帧以来经过的时间。

final float speed = 5f; // 5 units per second
Vector3 translation = new Vector3();
translation.set(direction);
translation.scl(speed * Gdx.graphics.getDeltaTime());

最后你需要将翻译添加到该位置

position.add(translation);

当然,根据您的实际实现,您可以批处理多个操作,例如:

translation.set(baseDirection).mul(rotation).scl(speed * Gdx.graphics.getDeltaTime());
position.add(translation);

Update:从 Xoppa 的评论中添加工作代码:

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

安卓。如何沿对象面向的方向移动对象(使用 Vector3 和四元数) 的相关文章

  • Android NDK 支持区域设置吗?

    我真正想做的就是使用格式化日期strftime x 以正确的顺序 在大多数平台上调用setlocale 足够 在 Android 上 我不断收到 美国日期 那么 Android 不支持语言环境吗 No setlocale and strft
  • Android:canvas.drawBitmap() 方法无法正常工作

    我已经发布了两个与此相关的问题 请参考此自定义饼图 1 https stackoverflow com questions 28343600 customize pie chart in quarter shape at the botto
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Android SHA1 发布密钥库无法与 Google 地图配合使用

    我正在使用 Google Maps Android API 但遇到了一些问题 我正在使用 android studio 签署我的 apk 在 android keystore jks 创建一个 另外 我选择 发布 作为其中的类型 我已经使用
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • Android Studio代理设置构建错误

    每当我尝试在 Android Studio 中构建应用程序时 都会收到以下错误 Error 169 254 16 169 254 16 Will ignore proxy settings for these hosts 我收到错误 5 次
  • Android TextureView 和硬件加速

    我正在尝试实现上所示的示例这一页 http developer android com reference android view TextureView html 我已经在运行 android 4 及以上版本的三种不同设备上进行了尝试
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • 如何在android中安装和使用couch db

    我应该如何在 android 中安装和使用 couch Db 我的意思是本地沙发数据库 我可以在平板电脑和模拟器中使用它 为此我必须遵循哪些步骤 我目前正在开发一个使用它的项目 有两种选择 1 couchbase android 是的 co
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • xsd.exe 生成的类可为空值

    我一直在使用 xsd exe 生成一个用于反序列化 XML 的类 我在源 xsd 中有不需要的十进制值
  • Angular 5 视图超时后不更新

    我在 Angular 5 中设置了一个超时 在一段时间后隐藏元素 this showElement true setTimeout function console log hide this showElement false 2000
  • 适用于 Mac 的单击一次部署

    正如标题所述 是否有与 Mac 上的 Click Once 应用程序部署等效的方法 我问这个问题是因为 Lion 附带的 Safari 版本已删除 DMG 磁盘映像 文件作为下载后打开的 安全文件类型 我工作的公司有一个相当特殊用途的应用程
  • 通过 BlackBerry 发送 POST 数据后获取 HTML 响应

    我需要在发送 POST 数据后从 URL 读取 HTML 响应 我已经有以下两个函数 但我不知道如何组合它们 以便我可以发送 POST 数据并获取响应 此函数获取标准 HTML 响应 public static String getData
  • Java Rest api 需要等待才能处理

    我有一个 Java Rest API 物联网设备将使用它来发送数据 每个设备都有一个时间段 比如 15 秒 与 API 进行通信 在该时间段内 可以有多个具有相同数据集的消息 我想要做的是 当 API 从设备接收到新消息时 它会等到时间段结
  • basic_ostringstream::str 悬空指针

    最近我发现了以下代码中的错误 ostringstream o o lt lt some string const char s o str c str empty string instead of expected some string
  • librosa.effect.Split的返回值很奇怪

    正如标题所示 这个函数的结果不符合逻辑 我不明白这个函数在做什么 例如 这里是一些可重现的代码 load sample audio filename librosa util example audio file audio sr libr
  • 推送到远程分支(无法更新引用)

    我有一个带有功能 初始更改分支的远程存储库 现在我想将一些文件从本地功能 初始更改分支推送到此远程分支 我浏览了一些关于推送到远程分支的帖子并尝试了一些方法 但我仍然遇到相同的错误 添加并提交后 我得到以下 git 状态 Sakibs Ma
  • Azure WebJobs SDK 服务总线死信队列

    使用 WebJobs SDK 时 将 BrokeredMessage 移动到死信队列的正确方法是什么 通常我只会调用 msg DeadLetter 但是 SDK 负责管理代理消息的生命周期 如果方法返回成功 它将调用 msg Complet
  • 如何在按下按钮后以动画方式显示 UIPickerView?

    我想在按下按钮后为 UIPickerView 制作动画 我已经将 UIPickerView 编码为隐藏在 viewDidLoad 上 并且在按下按钮后不会隐藏 但它的动画效果不像 ModalViewController 默认情况下的动画效果
  • 包更新到 Angular 5 最新版本,但 npm 未使用 Angular 模板在 Visual Studio 2017 中更新

    我已将 Visual Studio 2017 模板中的 Angular 4 更新为 Angular 5 我按照链接中的说明进行操作http www talkingdotnet com upgrade Angular 4 app Angula
  • 如何计算滚动 idxmax

    考虑pd Series s import pandas as pd import numpy as np np random seed 3 1415 s pd Series np random randint 0 10 10 list ab
  • 函数对象的好处?

    我知道STL中使用的函数对象只是简单的对象 我们可以像函数一样操作它 我可以说函数和函数对象的工作原理是相同的 如果这是真的 那么为什么我们应该使用函数对象而不是函数呢 主要好处是对函数对象 函子 的调用通常是可内联的 而对函数指针的调用通
  • AngularStrap 选项卡加载 html 片段

    我目前正在使用 Twitter Bootstrap 开发 AngularJS 项目 并尝试将我的 Bootstrap 指令转换为 Angular 我决定使用 AngularStrap 因为它提供了对 Bootstrap Select 的支持
  • 如果 c =a,b,c 的值是多少;

    int a 0 int b 1 int c a b int d a b 在初始化之外 逗号 ina b is the 逗号运算符 并评估为b 涉及行中的括号d造成这样的情况 所以该行实际上相当于 int d b 然而 在涉及c 这不是逗号运
  • 如何解决 Java Swing 登录窗口中的这些可视化问题?

    我是 Java Swing 的新手 但我遇到了一个问题 我必须创建一个登录窗口 灵感来自这样的图像 像这样 scilicet 窗口必须显示 2 个文本字段 用户在其中插入用户名和密码以及一个按钮来执行登录操作 好的 我认为这非常简单 我已经
  • bind_param 中的参数数量未知[重复]

    这个问题在这里已经有答案了 当您不知道要接收的参数数量时 你们会怎么做 例如 if a 1 filter AND u name if b 1 filter AND u address if c 1 filter AND u age if d
  • 将布尔值序列化为“1”和“0”而不是“true”和“false”

    我在上面找不到任何方法Boolean类将布尔值序列化为 1 和 0 而不是 true 和 false 有没有本地函数可以做到这一点 如果不是 最好的方法 最优化的方法 是什么 更新 我确实想制作一个String出于一个Boolean If你
  • 将上下文变量与 IBM Watson Conversation 中的实体进行比较

    在 Watson 对话对话框中 我创建了一个条件 就像是 if stored state states Florida AND preferred joint joint KFC then some response where store
  • 安卓。如何沿对象面向的方向移动对象(使用 Vector3 和四元数)

    我正在使用 libGDX 事实上对它来说相当新 和 Android 我想沿 3d 对象所面向的方向移动 使用一定的速度 我认为这是一个基本问题 但找不到直接答案 我有一个代表对象旋转 方向 的四元数 有一个代表对象位置的 Vector3 问