目标坐标到屏幕坐标 - Vuforia

问题描述 投票:0回答:1

我只想获取根据 iOS 中返回的姿势中的信息计算出的目标的 2dscreen 坐标。

有人会同情我吗,请给我一个答案,因为我实际上已经完成了我正在开发的应用程序,这是我需要的最后一块。我查看了文档,但我不了解矩阵数学。

vuforia
1个回答
0
投票

我想出了如何在屏幕上获得 X & y 2D 位置的近似值,这就是我所需要的,所以对于那些像我一样苦苦挣扎并且找不到正确方法的人来说,这是我的奇怪方法做它。

以iOS示例应用为基础;我在 AppController::getImageTargetResult 函数中添加了以下行。

vuMatrix44FGetPoseRot (modelViewMatrix, &translation, &axis, &angle);

翻译是一个 VuVector3F 并接收 3D 位置,其中 translation.data [0] 具有 Y,translation.data [1] 接收 X,translation.data [2] 接收 Z。这些值的范围是从 -1.0 到 +1.0.

在 MetalRenderer.swift 的渲染部分,我将这些值归一化

// 首先我得到屏幕尺寸。

让 screenWidth = Float (UIScreen.main.bounds.width)

让 screenHeight = Float (UIScreen.main.bounds.height)

// 然后我将 z 值归一化以将其转换为 0.0 到 1.0 的范围

让 z_Position = (UserDefaults.standard.float (forKey: "model_Position_Z") + 1.0) / 2.0

// 我为 x 和 y 创建了一个深度因子变量,用于缩放计算出的屏幕位置

// 使其在远离时移动较少,在靠近时移动较多。我从

得到了 0.070 和 0.014

// 实验,不理解它们。

让 x_depth: Float = (screenWidth * 0.070) * z_Position

让 y_depth: Float = (screenHeight * 0.014) * z_Position

// 然后我标准化 x 和 y 值并将它们与深度变量相乘

让 x_Position = ((UserDefaults.standard.float (forKey: "model_Position_X") * x_depth) + 1.0) / 2.0

让 y_Position = ((UserDefaults.standard.float (forKey: "model_Position_Y") * y_depth) + 1.0) / 2.0

// 最后我将它们乘以屏幕宽度得到答案

让 screen_x = CGFloat (x_Position * screenWidth)

让 screen_y = CGFloat (y_Position * screenHeight)

我知道这不是正确的做法,但它可以满足我的需要,它让我完成了我的项目。

尽管对“这个问题没有显示任何研究成果;它不清楚或没有用”这一点有两次反对票,但我可以向这些人保证,我做了很多令人沮丧的研究。我在 Google 搜索中找到的许多答案导致旧的已停用 Vuforia 论坛中出现“找不到页面”错误消息,我在这里找不到明确的最新答案。我不知道足够多的 3D 数学来提出正确的问题或在文档中查找,尽管对于那些消息灵通的人来说这是一件微不足道的事情。

至少我已经完成了,但是对于那些认为这是易于查找的信息的两个反对者来说,如果你能给我指明正确的方向就好了。

如果有人有时间向需要比我更准确的人展示如何正确地做这件事,那就太好了。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.