/ / Zdefiniuj cel w innym celu - macierz, 3d, vuforia

Zdefiniuj cel w innym celu - macierzy, 3d, vuforia

Używam Vuforii do rozpoznawania celów za pomocą kamery.

Mam markery: mały cel i znacznie większy cel. Muszę określić, że mniejszy cel jest umieszczony w większym celu.

Widzę już dwa markery w czasie. Mogę uzyskać matrycę 4x4 celów. Jednym z pomysłów było wykonanie rzutu 4x4 na płaszczyznę z0x na oba cele, a następnie zdefiniowanie, czy macierz jednego rzutu zawiera drugi. (Ale nie wiem, jak to zrobić)

Trochę kodu, w jaki sposób otrzymuję matrycę

- (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
}
}

Odpowiedzi:

1 dla odpowiedzi № 1

Rzutowanie macierzy na tę samą płaszczyznę jest łatwe - ten kod już masz, jeśli masz działającą próbkę Vuforii. To jest coś takiego:

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

JEDNAK nie wydaje mi się, że naprawdę musisz je wyświetlać, możesz po prostu porównać dwie matryce, które otrzymujesz z Vuforii.

Jednym ze sposobów sprawdzenia, czy jedna matryca jest wewnątrzinne (nie w 100% dokładne, ale dość proste) zależy od punktu środkowego i wielkości. Znaczenie - weź punkt środkowy jednego (wartości pozycji xiy w macierzy to odpowiednio modelViewMatrix.data [12] i modelViewMatrix.data [13]) i sprawdź, czy ten punkt po dodaniu szerokości i wysokości mieści się w granice drugiej matrycy (ponownie, przez punkt środkowy drugiej matrycy, szerokość i wysokość).