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 № 1Rzutowanie 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ść).