我正在使用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
}
}
答案 0 :(得分:1)
将矩阵投影到同一平面很容易 - 如果您有一个可用的Vuforia样本,那么您已经拥有此代码。它是这样的:
SampleUtils::multiplyMatrix(&projectionMatrix.data[0],
&modelViewMatrix.data[0] ,
&modelViewProjection.data[0]);
然而,我不认为你真的需要投射它们,你可以简单地比较你从Vuforia得到的两个矩阵。
检查一个矩阵是否在另一个内部(不是100%准确,但非常简单)的一种方法是中心点和大小。含义 - 取一个中心点(矩阵中的x和y位置值分别为modelViewMatrix.data [12]和modelViewMatrix.data [13]),并在添加宽度和高度之后查看该点是否在第二个矩阵的边界(再次,由第二个矩阵中心点,宽度和高度)。