用于旋转/平移的矩阵的适当乘法

2023-11-24

Rotation and Translation about arbitrary point

为了旋转/平移对象(仅绕 z 轴旋转,仅在 xy 平面内平移),不仅与全局中心(设备中心)有关,而且还与其他任意点有关,我创建了一个算法,这是正确的(因为所有高级我与之讨论过的编码员认为这是正确的),but删除一个需要很长时间不需要的翻译正在实施中(算法于8月4日创建,并于同一天实施,此后代码已修改15次)。

这是实现http://www.pixdip.com/opengles/transform.php#ALGO1

产生不需要的翻译的代码行位于内部:

private static void updateModel(int upDown, float xAngle, float yAngle, float zAngle) {

并列出如下:

  1. Matrix.multiplyMV(GLES20Renderer._uBodyCentreMatrix, 0, GLES20Renderer._ModelMatrixBody, 0, GLES20Renderer._uBodyCentre, 0);

  2. objX = GLES20Renderer._uBodyCentreMatrix[0];

  3. objY = GLES20Renderer._uBodyCentreMatrix[1];

即使进行以下更改,沿 +Y 的不需要的平移仍然存在:

  1. objY = _uBodyCentreMatrix[1] - _uBodyCentre[1];

  2. zAngle = 0;

  3. ds = 0;

价值-0.545867f每次调用时都会添加到 Y 坐标onDrawFrame(),因为 Renderer 类的这些字段:

private static final float[] _uBodyCentre = new float[]{-0.019683f, -0.545867f, -0.000409f, 1.0f};

protected static float[] _uBodyCentreMatrix = new float[4];

in http://www.pixdip.com/opengles/transform.php#FIELDS

我需要帮助来理解为什么会发生这种不需要的转换,转换到底出了什么问题,或者算法是否错误。

万向节锁会成为这里的问题吗?

请不要要求我执行/练习更简单的示例,因为我已经准备了用于全局 z 轴旋转/平移的 Renderer 类,并且我正在执行的这个新任务使用相同的类,并稍加修改updateModel()

(请注意,所需的旋转仅绕 z 轴且仅在 xy 平面内平移)

[API 10->15]

实际的Renderer类有两个对象:坦克炮塔(喷嘴)和坦克本体,当炮塔(喷嘴)有不需要的向前平移时,主体有不需要的向后平移

关于设备中心平移/旋转的apk(在opengles 2.0中很容易制作):http://www.pixdip.com/opengles/global.php

用于关于任意点的平移/旋转的 Apk(沿 +Y 具有不需要的平移):http://www.pixdip.com/opengles/local.php

用于围绕任意点进行平移/旋转的 Apk,其中 updateModel() 仅被调用 4 次:http://www.pixdip.com/opengles/limited.php所需的代码(应该足够了)在这里:http://www.pixdip.com/opengles/code.php

对象的某些部分(喷嘴/炮塔,主体)当前正在围绕自己的中心旋转,而不是对象的中心(即_playerCentre),我稍后会对其进行修改。

我试图证明逻辑http://www.pixdip.com/opengles/images.php


看起来问题是:

Matrix.multiplyMV(GLES20Renderer._uBodyCentreMatrix, 0, GLES20Renderer._ModelMatrixBody, 0, GLES20Renderer._uBodyCentre, 0);

Matrix.multiplyMV 是一种将 4 元素向量乘以 4x4 矩阵并将结果存储在 4 元素列向量中的方法。用矩阵表示法表示:结果 = lhs x rhs。如果 resultVector 元素与 lhsMatrix 或 rhsVector 元素重叠,则 resultVector 元素值未定义。

我认为您没有发布所有代码,因此我无法确定,但根据您对“_uBodyCentreMatrix”的命名来判断,您可能会遇到错误,因为它不是 4 元素列向量。

我假设“_ModelMatrixBody”是一个 4x4 矩阵,“_uBodyCentre”是一个 4 元素向量,否则这些也可能会出现问题。

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

用于旋转/平移的矩阵的适当乘法 的相关文章

  • gradle更新后无法找到方法(无法编译项目)

    我尝试将项目中的 gradle 版本更新为 4 1 milestone 1 以下这些说明 https developer android com studio build gradle plugin 3 0 0 migration html
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • 如何在android中显示保存在sdcard文件夹中的图像[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我正在显
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • @OrderBy 导致 java.lang.ClassCastException:antlr.CommonToken 无法转换为 antlr.Token [重复]

    这个问题在这里已经有答案了 我正在尝试使用 OrderBy运行在 Spring MVC 项目上的注释JBoss EAP 6 1 server 我有 2 个项目 第一个项目名为model gen wifipnsd并且它只包含模型类由第二个项目
  • webdriver:获取元素的xpath?

    是否可以返回 WebElement 的 xpath 不是直接来自 WebDriver 但如果您确实需要 您可以伪造它 public String getElementXPath WebDriver driver WebElement ele
  • 在数组上使用 OR 逻辑作为 Sumproduct 中的参数

    我有一个相当大的数据集 我需要将多个条目组合成一个值 我的数据集包含两个数据集组合的数据 每个数据集都使用自己的 ID 和密钥 我想用一个Sumproduct 像这样的函数 SUMPRODUCT Raw data C C Landgebru
  • Spring Boot 应用程序不提供静态内容

    我正在使用 Spring Boot 并试图在部署时使我的静态资源 CSS JS 字体 可用 源代码可供您查看或克隆https github com joecracko StaticResourceError 现在 我部署的网站看不到我的 C
  • 在命令行上运行 XQuery

    听起来我需要某种类型的 XML 处理器 看起来有一个名为 Saxon 的程序 我可以用它来运行 XQuery 当我尝试时这个网站我得到的例子 Error Could not find or load main class net sf sa
  • 使用的变量定义是否经过优化?

    考虑以下方法 private static long maskAndNegate long l int numberOfLeadingZeros Long numberOfLeadingZeros l long mask CustomBit
  • Flutter:无法在onBackgroundMessage中使用任何插件

    我正在使用 Firebase 推送通知 并且想在触发 onBackgroundMessage 时执行一些代码 它实际上被触发是因为我在控制台中打印 但我尝试使用几个插件但没有成功 每次都会出现类似的错误 未处理的异常 MissingPlug
  • ITextSharp - 将两个 pdf 合并到一个页面中

    我将简单地阐述这个问题 我有这个pdf abcd 和这个 1234 4567 我想将它们合并以获得 abcd 1234 4567 可以使用 iTextSharp 或任何其他免费工具吗 提前致谢 这是一个老问题 但是如果有人再次进入这里我的解
  • 将可空类型序列化为可选的不可空元素

    我有一个带有可选元素的 xsd 架构 minOccurs 0 maxOccurs 1 类型int 该元素未定义为可为空 在数据模型中 我想将其映射到 net 类型的字段Nullable
  • System.out.printLn() 如何接受整数?

    于是前几天开始学习java 遇到一个问题 对于下一个表达式 String foo 123 不允许 然而 在System out printIn 我们可以使用类似的东西 int x 5 System out println x 既然不允许将整
  • 如何在Android中限制Spinner下拉视图的高度

    请建议我用来创建它的任何方法 Query 我正在创建 2 Spinner 视图 我必须在其中添加国家 城市列表 所以就像如果我选择印度 那么我会在下拉视图中看到 50 个项目 问题是它占用了整个页面高度 我想要的是 我想创建一个下拉视图 用
  • 如何在支持暂停/恢复的情况下上传到 S3?

    我想知道如何通过 暂停和恢复 支持将文件上传到 Amazon S3 通过网络浏览器 有可用的示例 Web 应用程序吗 任何编程语言 框架都可以 提前致谢 SOLUTION 我实现了以下应用程序 GitHub 链接 它基于示例应用程序和 ge
  • 如何截断外键约束表?

    为什么没有TRUNCATE on mygroup工作 尽管我有ON DELETE CASCADE SET I get 错误 1701 42000 无法截断外键约束中引用的表 mytest instance 约束instance ibfk 1
  • jquery:如果语句在ajax成功函数中不起作用

    我的 AJAX 中有一个成功函数 它从 python 脚本返回响应文本 可以是 SUCCESS 或 EMPTY 现在我想在 success 函数中放置一个 if 循环 但 if 循环不起作用 我从 python 脚本中获取了正确的数据 因为
  • 如何在企业代理后面配置 Nginx

    是否有与 Apache 相当的工具ProxyRemoteNginX 的指令 所以场景是我在一个公司代理后面 我想使用 NginX 为各种服务做代理通行证 我会在 Apache 中执行以下操作 ProxyPass localStackOver
  • CSS:创建凸起框效果的好方法是什么?

    也就是说 元素的左边框和下边框需要提供弹出的 3D 效果 有没有一种好的 纯 CSS 的方法来实现这种效果 foo border 8px outset 999 webkit box shadow 5px 5px 15px rgba 0 0
  • 在 Rails 中子类化 User 模型真的很糟糕吗?

    我受到 Rails 的强烈反对 因为我已将 User 子类分为许多不同的子类 在我的应用程序中 并非所有用户都是平等的 实际上有很多模型对象 并不是每个用户类型都可以访问它们 我还需要一种方法来进行多态行为 例如 许多方法的行为会根据类型而
  • 如何在不增加背景图像大小的情况下增加(自定义类型)UIButton 的可点击(点击)区域

    是否可以在不改变按钮背景图像大小的情况下增加按钮的可点击区域 I tried shareButton setContentEdgeInsets UIEdgeInsetsMake top left bottom right shareButt
  • x86暂停指令的跨平台实现

    编写 x86 暂停指令的跨平台实现的最佳实践是什么 我计划在 C 11 项目的繁忙旋转循环中使用它 如果我只使用 gcc 工具链 那么我可以使用 mm pause 内在函数 即使本机处理器不支持 x86 暂停指令 此内在函数是否会执行正确的
  • 用于旋转/平移的矩阵的适当乘法

    为了旋转 平移对象 仅绕 z 轴旋转 仅在 xy 平面内平移 不仅与全局中心 设备中心 有关 而且还与其他任意点有关 我创建了一个算法 这是正确的 因为所有高级我与之讨论过的编码员认为这是正确的 but删除一个需要很长时间不需要的翻译正在实