Augmented reality dengan bahasa pemrograman Processing

Berkat Augmented Reality kita dapat menambahkan elemen sintetis, secara klasik dalam 3D, ke yang sudah nyata. Dengan kamera, webcam dalam kasus kami, dan berkat bantuan pola yang akan ditafsirkan, kami akan memposisikan objek 3D yang ditumpangkan pada gambar video adegan kami (yang pada dasarnya serius kamera). Anda dapat melihat beberapa contoh Augmented Reality (R.A.) di sini.

Berkat Gambar 1, kami mendapatkan gambaran tentang apa yang akan terjadi dalam program kami. Semua dari tangan perpustakaan khusus untuk Memproses NyARToolkit serta perpustakaan SaitoObjLoader untuk memuat model 3D. Yang terakhir ini pada dasarnya terdiri dari file JAVA (OBJLoader.jar) yang berisi semua fungsi Processing yang akan kita akses dari kode kita.

Gambar 1. Dial 3D dan bertekstur melayang di depan mata kita berkat R.A.

Sebelum memulai, penting bahwa dalam direktori Pemrosesan sketsa kami, kami membuat dua subdirektori. Saya sarankan Anda melakukannya dengan cara ini:

  • “Data” subdirektori. Ini menyimpan model dan tekstur terkait (file “bola.jpg”, “sphere.mtl” dan “sphere.obj”), file yang terkait dengan penanda R.A. yang akan kita gunakan (klasik yang datang sebagai contoh dengan perpustakaan, yaitu, file pola “patt.hiro” dan “patt.kanji”) dan konfigurasi kamera yang juga memberi kita perpustakaan R.A. (“camera_para.dat”). Dalam kasus model 3D, katakan bahwa jenis file ini dapat dengan mudah dihasilkan dari program pengeditan 2D (tekstur) dan 3D (model). Bahkan kedua file tersebut. MTL seperti . OBJ dapat diedit dengan editor teks.

Catatan: kita dapat melihat pola R.A. yang melekat pada rak buku pada Gambar 2.

  • Subdirektori “kode”. Simpan perpustakaan itu sendiri. Semuanya, yaitu file “OBJLoader.jar”, “NyAR4psg.jar” dan “NyARToolkit.jar” yang akan kita unduh.

Gambar 2. R.A. Pola dari perpustakaan NyARToolkit kami.

Kita akan membahas inisialisasi seluruh sistem, tersedia dalam kode 1.

Kami sedang menguji beberapa fitur Augmented Reality // dengan menggunakan pustaka NyARToolkit // tersedia di http://nyatla.jp/nyartoolkit/wp/ // dan memuat model 3D dengan pustaka SaitoObjLoader // yang tersedia di http://code.google.com/p/saitoobjloader/ // Oleh karena itu kami mengimpornya import processing.video.*; import jp.nyatla.nyar4psg.*; import saito.objloader.*; // Kami mendefinisikan beberapa objek: // Kamera, multimarker dan model 3D Capture myCam; MultiMarker myMarkers; MODEL OBJModel; // Fungsi inisialisasi setup() yang akan dipanggil sekali void setup() { // Resolusi jendela kami // Kami mengaktifkan Processing 3D untuk dapat merender ukuran model 3D(640.480,P3D); // Kami menentukan mode warna kami // dengan menggunakan warna RGB dalam interval colorMode (RGB,  100); // Inisialisasi Augmented Reality // Kami akan menggunakan beberapa penanda dan file // yang disediakan oleh perpustakaan NyARToolkit // Kami mulai dengan melampirkan tangkapan webcam kami ke jendela myCam=new Capture(this,640,480); // Kami menginisialisasi objek multiMarker kami myMarkers // File camera_para.dat disediakan oleh pencipta perpustakaan: Itu perlu ditempatkan di dalam folder data dalam sketsa myMarkers= New MultiMarker (ini, lebar, tinggi,"camera_para.dat", NyAR4PsgConfig.CONFIG_PSG); // Kami akan memuat 2 penanda dalam objek multiMarker kami (myMarkers) // Kedua penanda disediakan oleh pencipta perpustakaan: // patt.hiro dan patt.kanji (di dalam folder data dalam sketsa) myMarkers.addARMarker("patt.hiro", 80); myMarkers.addARMarker("patt.kanji",80); // Kami memuat model 3D kami yang ditempatkan di dalam folder data dalam model sketsa = OBJModel baru (ini, "sphere.obj", "absolute", TRIANGLES); model.enableDebug(); // Kami secara global menskalakan model 3D dengan faktor 20 // Ditambah dengan itu, kami memusatkannya dan kami mengaktifkan texturing ke model.scale(20); model.translateToCenter(); model.enableTexture();

Kode 1. Variabel dan inisialisasi sistem R.A. kami

Hal pertama yang kami lakukan adalah mengimpor library yang kami butuhkan, baik dari segi video maupun sistem R.A. (import processing.video.* dan import jp.nyatla.nyar4psg.*) dan loading model 3D (import saito.objloader.*). Selanjutnya, dan dalam fungsi inisialisasi kami (setup()) kami membuat jendela 640 x 480 piksel dan juga mengaktifkan fungsi 3D Pemrosesan (P3D). Kami menentukan mode warna yang akan kami gunakan (nilai warna RGB dibatasi antara nilai 0, minimum, dan 100, maksimum) dan menginisialisasi objek kami myCam, myMarkers dan model, memanggil konstruktor mereka:

  • myCam: akuisisi baru video melalui webcam 640 x 480 piksel per frame.
  • myMarkers: objek yang dapat berisi lebih dari satu pola R.A. (dalam kasus kami dua), yang dikonfigurasi sesuai dengan nilai standar perpustakaan (amati bagaimana kami meneruskan ke konstruktor lebar dan tinggi jendela kami agar sesuai). Berkat metode addARMarker-nya, kami akan mengaitkan dua pola R.A. “patt.hiro” dan “patt.kanji”.

CATATAN: untuk mencetak pola, file di . PDF yang dilampirkan ke perpustakaan R.A. Yaitu, “pattHiro.pdf” dan “pattKanji.pdf”. File “patt.hiro” dan “patt.kanji” tidak digunakan.

  • model: Perhatikan bahwa kita menentukan bahwa kita ingin melukis berdasarkan segitiga dan bahwa kita akan memuat model “sphere.obj”, yang kita rujuk sebelumnya. Metode scale(20), translateToCenter(), dan enableTexture() patut disorot. Berkat mereka, kami menskalakan model 3D secara merata dalam 3 arah XYZ -nya (kami membuatnya 20 kali lebih besar), memfokuskannya ke sumbu koordinat dunia dan kemudian mengaktifkan tekstur untuk itu. Penskalaan memungkinkan kita untuk memberikan ukuran yang kita inginkan.

Pada kode 2 kita mulai dengan memeriksa bahwa objek jenis kamera myCam kita tersedia berkat jenis bersyarat jika (yaitu, webcam dalam operasi normal) sehingga jika tidak, kita membatalkan eksekusi program. Dari sana, kami membaca gambar itu (myCam.read()) dan memulai deteksi pola (penanda) dalam gambar (myMarkers.detect(myCam)). Ingatlah bahwa kami memiliki dua kemungkinan di objek MultiMarker myMarkers kami. Kami melukis latar belakang hitam, menerapkan sebagai latar belakang gambar yang diperoleh dari webcam (membuat video menempati seluruh jendela kami) dan menentukan loop untuk itu akan memberikan dua “belokan”, satu untuk setiap penanda.

Sekali lagi jika kondisional digunakan untuk memvalidasi bahwa memang ada pola dalam gambar karena jika tidak maka tidak perlu melakukan apa pun (jika tidak ada penanda, tidak ada model 3D untuk dimuat).  Kemudian transformasi yang terkait dengan penampilan salah satu dari dua pola dimulai. Ini beroperasi antara metode myMarkers.beginTransform(i) dan myMarkers.endTransform(), di mana variabel yang saya rujuk ke penanda yang digunakan. Mari kita amati bagaimana transformasi, yang akan mempengaruhi model 3D, terdiri dari terjemahan dalam Z (kami menambahkan 20 unit ke kedalaman) dan penskalaan (kami membagi dimensinya dengan 10). Akhirnya kita melanjutkan untuk melukis model 3D itu sendiri, berkat metode draw() dari objek model.

Loop void draw() { // Model 3D kami akan menjadi bola bertekstur // Hal pertama yang perlu kita evaluasi bahwa webcam berfungsi dengan baik jika (myCam.available() !=true) { return; } // Jika webcam kita berfungsi sebagaimana mestinya, kita membaca gambar darinya myCam.read(); // Kita mulai mendeteksi penanda myMarkers.detect(myCam); // Latar belakang hitam untuk latar belakang jendela kita(0); // Kami menerapkan latar belakang myMarkers.drawBackground(myCam); // Kami menganalisis apakah salah satu dari 2 penanda kami hadir untuk(int i=0;i<2;i++){ if((!myMarkers.isExistMarker(i))){ lanjutkan; } // Jika salah satu dari 2 penanda hadir // kami akan merender model 3D kami (bola bertekstur) // Kami akan menerapkan dua transformasi 3D // untuk menskalakan dan menerjemahkan model 3D kami dengan benar myMarkers.beginTransform(i); translate(0,0,20); scale(0.1); Kami merender model 3D kami! model.draw(); myMarkers.endTransform(); } }

Kode 2. Loop iterasi Draw().

Related posts