将目标定义在另一个目标中

时间:2017-04-05 11:26:03

标签: matrix 3d vuforia

我正在使用Vuforia通过相机识别目标。

我有标记:小目标和更大的目标。 我需要定义较小的目标放在较大的目标内。

我已经可以及时看到两个标记。我可以获得目标的4x4矩阵。 其中一个想法是将4x4投影到z0x平面到两个目标,然后定义一个投影矩阵是否包含第二个。(但我不知道该怎么做)

一些代码我如何获得矩阵

- (void) renderFrameWithState:(const Vuforia::State&)state projectMatrix:(Vuforia::Matrix44F&)projectionMatrix {
//some opengl initializations
 for (int i = 0; i < state.getNumTrackableResults(); ++i) {
        // Get the trackable
        const Vuforia::TrackableResult* result = state.getTrackableResult(i);
        const Vuforia::Trackable& trackable = result->getTrackable();

        Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose()); //getPose() returns 3x4 matrix
}
}

1 个答案:

答案 0 :(得分:1)

将矩阵投影到同一平面很容易 - 如果您有一个可用的Vuforia样本,那么您已经拥有此代码。它是这样的:

SampleUtils::multiplyMatrix(&projectionMatrix.data[0],
                            &modelViewMatrix.data[0] ,
                            &modelViewProjection.data[0]);

然而,我不认为你真的需要投射它们,你可以简单地比较你从Vuforia得到的两个矩阵。

检查一个矩阵是否在另一个内部(不是100%准确,但非常简单)的一种方法是中心点和大小。含义 - 取一个中心点(矩阵中的x和y位置值分别为modelViewMatrix.data [12]和modelViewMatrix.data [13]),并在添加宽度和高度之后查看该点是否在第二个矩阵的边界(再次,由第二个矩阵中心点,宽度和高度)。