Tentukan target di target lain

Saya menggunakan Vuforia untuk mengenali target melalui kamera.

Saya punya penanda: target kecil dan target lebih besar. Saya perlu mendefinisikan bahwa target yang lebih kecil ditempatkan di dalam target yang lebih besar.

Saya sudah dapat melihat dua penanda pada waktunya. Saya bisa mendapatkan matriks target 4x4. Salah satu idenya adalah membuat proyeksi bidang 4x4 ke bidang z0x ke kedua target dan kemudian menentukan apakah satu matriks proyeksi berisi matriks proyeksi kedua. (tapi saya tidak tahu bagaimana melakukannya)

Beberapa kode bagaimana saya mendapatkan matriks

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

person DenFav    schedule 05.04.2017    source sumber


Jawaban (1)


Memproyeksikan matriks ke bidang yang sama sangatlah mudah - Anda sudah memiliki kode ini jika Anda memiliki sampel Vuforia yang berfungsi. Ini adalah sesuatu seperti ini:

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

NAMUN, menurut saya Anda tidak perlu memproyeksikannya, Anda cukup membandingkan dua matriks yang Anda dapatkan dari Vuforia.

Salah satu cara untuk memeriksa apakah satu matriks berada di dalam matriks lainnya (tidak 100% akurat, namun cukup sederhana) adalah dengan titik pusat dan ukurannya. Artinya - ambil titik tengah salah satunya (nilai posisi x dan y dalam matriks masing-masing adalah modelViewMatrix.data[12] dan modelViewMatrix.data[13]), dan lihat apakah titik tersebut, setelah menambahkan lebar dan tinggi berada dalam batas batas matriks kedua (sekali lagi, berdasarkan titik pusat matriks kedua, lebar dan tinggi).

person yakobom    schedule 06.04.2017
comment
Jadi saya harus menyatakan.getTrackableResult(i) untuk setiap target, convertPose2GLMatrix(result-›getPose()) untuk mendapatkan matriks 4x4 dan melakukan semua perhitungan yang Anda jelaskan di atas dengan matriks 4x4? Seperti yang saya pahami, itu tidak mempertimbangkan sebuah pesawat, dan jika target yang lebih kecil berada di atas target kedua sejauh 10cm, saya mungkin mengatakan bahwa target yang lebih kecil ada di dalam target kedua, apakah benar? - person DenFav; 06.04.2017
comment
Menurut saya ini tidak benar. Namun, Anda juga dapat menggunakan metode yang saya tawarkan untuk matriks yang diproyeksikan. Bagaimanapun, menurut saya Anda harus mencoba salah satu metode atau keduanya - ini seharusnya cukup mudah. Jika membantu, lihat di sini untuk beberapa penjelasan tentang matriksnya: stackoverflow.com/questions/29061257/ - person yakobom; 06.04.2017
comment
Bisakah Anda memberikan link ke deskripsi matriks 4x4. Saya tidak dapat menemukannya, saya ingin memastikan 12 dan 13 adalah pusat dan juga ingin mengetahui nilai lain untuk digunakan (mungkin berguna) - person DenFav; 06.04.2017
comment
Tentu - tapi ya, 12, 13 dan 14 adalah x, y dan z dari titik pusat. Ini adalah penjelasan umum: opengl-tutorial.org/beginners-tutorials /tutorial-3-matriks. Bagaimana matriks itu sendiri dibangun tergantung pada implementasinya, dan Anda menggunakan Vuforia. Namun saya sangat menyarankan untuk mencobanya sendiri - jika Anda tidak yakin, tambahkan beberapa angka (200?) matriks.data[12] Anda dan lihat hasilnya... Pendekatan langsung ini akan membawa Anda lebih cepat ke hasil yang Anda inginkan. - person yakobom; 06.04.2017
comment
Terima kasih. Saya sudah memeriksa tautannya tetapi masih memiliki satu pertanyaan lagi - bagaimana cara mendapatkan lebar dan tinggi di Vuforia? Haruskah saya menggunakan matematika matriks juga? - person DenFav; 06.04.2017
comment
Seperti yang saya katakan, tautannya bersifat umum. Jika Anda melihat bagian Matriks Terjemahan, Anda akan melihat bahwa kolom terakhir (yang sebenarnya adalah sel 12, 13, 14, 15) berisi x, y dan z di sel 12, 13, 14. Anda bisa mendapatkan lebar dan tinggi dari api 'getSize' Vuforia di imageTarget. Anda sekarang seharusnya sudah memiliki apa yang Anda butuhkan untuk mencoba solusinya, sobat. - person yakobom; 06.04.2017
comment
Mari kita melanjutkan diskusi ini dalam chat. - person DenFav; 06.04.2017