Grafik komputer 3D: Buat model dunia Anda

Jelajahi dunia Anda

Sejauh yang saya tahu, kita tidak bisa hanya memasukkan sedikit dari dunia kita langsung ke dalam komputer (tanpa merusak komputer). Hal terbaik yang bisa kita lakukan adalah membuat model komputer dunia kita. Mengingat keterbatasan itu, bagaimana kita membuat model seperti kursi, misalnya?

Objek di dunia kita memiliki karakteristik, atau properti, seperti bentuk, ukuran, berat, posisi, orientasi, dan warna (dan daftarnya terus bertambah). Mari kita pertimbangkan sejenak hanya bentuk, posisi, dan orientasinya - properti ini adalah yang kita sebut properti spasial . Dan mari kita mulai dengan sesuatu yang lebih mudah dikerjakan selain kursi - kubus, misalnya.

Perhatikan ilustrasi pada Gambar 1. Ini menunjukkan sebuah kubus duduk di ruangan kosong. (Baiklah, kamarnya juga memiliki pintu, tapi itu hanya untuk membuat ruangan terlihat lebih seperti kamar.)

Gambar 1: Sebuah ruangan dengan kubus

Untuk menentukan bentuk, posisi, dan orientasi kubus, kita perlu menentukan lokasi setiap sudutnya. Untuk melakukan itu, kita bisa menggunakan bahasa seperti ini:

Sudut pertama adalah satu kaki (atau meter, jika Anda mau) di atas lantai dan dua setengah kaki (atau meter) dari dinding di belakang saya. Sudut kedua juga satu kaki di atas lantai dan satu kaki dari tembok di sebelah kiri saya.

Perhatikan bahwa kedua sudut ditentukan relatif terhadap sesuatu yang lain (dinding dan / atau lantai). Dalam model komputer kita, kita dapat mendefinisikan lantai dan dinding dan menggunakannya sebagai titik acuan, tetapi ternyata jauh lebih mudah untuk hanya memilih satu titik acuan (yang akan kita sebut titik awal ) dan menggunakannya sebagai gantinya. Untuk asal kita, kita akan menggunakan sudut yang dibentuk oleh dua dinding dan lantai. Gambar 2 menunjukkan lokasi asal kita.

Gambar 2: Asal dan sumbu koordinat

Sekarang kita perlu menunjukkan di mana setiap sudut berada sehubungan dengan asalnya. Anda dapat menentukan jalur dari asal ke sudut kubus dengan beberapa cara. Untuk kesederhanaan, kita harus menyetujui standar. Mari lakukan hal berikut:

Bayangkan bahwa setiap tepi yang dibentuk oleh perpotongan dinding dan dinding, atau dinding dan lantai, diberi nama - kita akan menyebutnya sumbu x , sumbu y , dan sumbu z , seperti yang ditunjukkan pada Gambar 2. Dan mari kita juga setuju sebelumnya bahwa kita akan menentukan lokasi sudut dengan mengikuti resep ini:

  • Pertama, ukur seberapa jauh kita harus menempuh perjalanan dari titik awal dalam garis lurus yang sejajar dengan sumbu x
  • Kemudian, ukur seberapa jauh kita harus menempuh jarak dari titik tersebut dalam garis lurus sejajar sumbu y
  • Terakhir, ukur seberapa jauh kita harus menempuh jarak dari titik tersebut dalam garis lurus yang sejajar dengan sumbu z

Gambar 3 menunjukkan jalur yang akan kita ikuti untuk sampai ke salah satu sudut kubus.

Gambar 3: Menemukan jalur Anda

Sebagai notasi singkat, mari tulis semua jarak ini sebagai:

  • Jarak dari titik asal sejajar sumbu x
  • Jarak dari titik asal sejajar dengan sumbu y
  • Jarak dari titik asal sejajar dengan sumbu z

atau (bahkan lebih pendek):

(jarak x, jarak y, jarak z) 

Triplet nilai ini disebut koordinat sudut . Kita dapat menentukan posisi ruang di setiap sudut dengan cara yang sama. Kita mungkin menemukan, misalnya, bahwa kubus dalam contoh ini memiliki sudut di:

(3 feet, 1 foot, 2 feet)

atau

(3 feet, 1 foot, 3 feet)

atau

(4 feet, 1 foot, 2 feet)

dan seterusnya.

Satuan ukuran (kaki atau meter, misalnya) tidak penting untuk tujuan kita. Yang penting adalah bagaimana unit memetakan ke unit standar real estate layar - piksel. Saya akan berbicara lebih banyak tentang pemetaan itu nanti.

Sedikit gelisah

Lokasi sudut kubus menentukan posisi dan orientasi kubus. Namun, mengingat hanya koordinat sudut-sudutnya, kita tidak dapat merekonstruksi sebuah kubus (apalagi kursi). Kita benar-benar perlu tahu dimana ujung-ujungnya, karena ujung-ujungnya menentukan bentuk.

Semua tepi memiliki satu karakteristik yang sangat bagus - selalu dimulai dan diakhiri di sudut. Jadi, jika kita tahu dimana semua ujungnya, kita pasti akan tahu dimana semua sudutnya.

Sekarang kita akan membuat satu asumsi penyederhanaan yang besar. Dalam model dunia kita, kita akan melarang tepi melengkung (Anda akan mempelajari alasannya nanti); tepinya harus selalu berupa garis lurus. Untuk memperkirakan tepi melengkung, kita akan meletakkan tepi lurus dari ujung ke ujung, seperti pada Gambar 4.

Gambar 4: Perkiraan garis lurus dari sebuah kurva

Tepi kemudian menjadi tidak lebih dari segmen garis sederhana. Dan segmen garis ditentukan oleh koordinat titik awal dan akhirnya. Oleh karena itu, model suatu benda tidak lebih dari kumpulan ruas garis yang menggambarkan bentuknya.

Visualisasi: Ini bukan hanya untuk relaksasi lagi

Sekarang kita tahu bagaimana memodelkan suatu objek, kita siap untuk mengatasi masalah merepresentasikan model di layar komputer.

Pikirkan layar komputer sebagai jendela ke dunia virtual kita. Kami duduk di satu sisi jendela, dan dunia virtual duduk di sisi lain. Gambar 5 mengilustrasikan konsep ini.

Gambar 5: Jendela kita ke dunia maya

Ada banyak cara untuk meletakkan informasi dalam model di jendela (atau layar komputer). Mungkin yang paling sederhana adalah apa yang disebut proyeksi isometrik .

Karena model kita memiliki tiga dimensi dan layar komputer hanya memiliki dua, kita dapat memetakan model ke layar dengan terlebih dahulu menghapus koordinat z (koordinat ketiga dari tiga) dari setiap titik dalam model. Ini menyisakan kita dengan koordinat x dan y untuk setiap titik. Koordinat x dan y diskalakan dengan tepat (berdasarkan unit model) dan dipetakan ke piksel di layar. Kita dapat menggunakan langkah-langkah ini di setiap tempat tujuan dalam model untuk mencari tahu di mana ia akan muncul di layar.

Ternyata, tidak perlu mengubah setiap poin dalam model kita seperti ini. Salah satu konsekuensi dari pendekatan setiap tepi dalam model dengan segmen garis adalah bahwa kita hanya perlu mengubah titik akhir dari segmen garis, bukan setiap titik pada segmen garis. Ini benar karena proyeksi sederhana (seperti proyeksi isometrik) selalu mengubah segmen garis menjadi segmen garis - segmen garis tidak menjadi kurva. Oleh karena itu, setelah Anda mengetahui posisi titik akhir yang diubah, kita dapat menggunakan rutinitas penggambaran garis bawaan AWT untuk menggambar segmen garis itu sendiri.

Saya pikir contoh mungkin dalam urutan. Saya akan membuat tiga model sederhana dengan bentuk yang sama dalam orientasi berbeda.

Tabel 1 berisi data yang mendeskripsikan bentuk sederhana pada posisi pertama. Setiap baris dalam tabel sesuai dengan satu sisi. Tabel memberikan koordinat titik awal dan akhir tepi. Mari kita asumsikan kita sedang melihat bentuk dari luar sepanjang sumbu z.

Segmen Mulai Akhir
x y z x y z
SEBUAH 25 0 -70 25 35 -35
B 25 35 -35 25 0 0
C 25 0 0 25 -35 -35
D 25 -35 -35 25 0 -70
E 25 0 -70 -25 0 -70
F -25 0 -70 -25 35 -35
G -25 35 -35 -25 0 0
H. -25 0 0 -25 -35 -35
saya -25 -35 -35 -25 0 -70
Tabel 1: Data untuk bentuk sederhana - posisi pertama

Applet pada Gambar 6 menunjukkan apa yang akan kita lihat.

Anda memerlukan browser yang mendukung Java untuk melihat applet ini. Gambar 6: Bentuk sederhana - posisi pertama

Sekarang mari kita putar bentuknya beberapa derajat. Tabel 2 berisi data yang menggambarkan bentuk yang sama di posisi kedua. Perhatikan, hanya posisi dan orientasinya yang berubah, bukan bentuknya.

Segmen Mulai Akhir
x y z x y z
SEBUAH 45 0 -58 34 35 -25
B 34 35 -25 23 0 7
C 23 0 7 34 -35 -25
D 34 -35 -25 45 0 -58
E 45 0 -58 -2 0 -74
F -2 0 -74 -12 35 -41
G -12 35 -41 -23 0 -7
H. -23 0 -7 -12 -35 -41
saya -12 -35 -41 -2 0 -74
Tabel 2: Data untuk bentuk sederhana - posisi kedua

Applet pada Gambar 7 menunjukkan apa yang akan kita lihat.

Anda memerlukan browser yang mendukung Java untuk melihat applet ini. Gambar 7: Bentuk sederhana - posisi kedua

Tiga adalah pesona, jadi mari kita putar sekali lagi - kali ini ke atas beberapa derajat. Tabel 3 berisi data yang menggambarkan bentuk di posisi ketiga.

Segmen Mulai Akhir
x y z x y z
SEBUAH 45 -26 -52 34 19 -38
B 34 19 -38 23 3 6
C 23 3 6 34 -42 -6
D 34 -42 -6 45 -26 -52
E 45 -26 -52 -2 -33 -66
F -2 -33 -66 -12 12 -52
G -12 12 -52 -23 -3 -6
H. -23 -3 -6 -12 -49 -20
saya -12 -49 -20 -2 -33 -66
Tabel 3: Data untuk bentuk sederhana - posisi ketiga

Applet pada Gambar 8 menunjukkan apa yang akan kita lihat.

Anda memerlukan browser yang mendukung Java untuk melihat applet ini. Gambar 8: Bentuk sederhana - posisi ketiga

Membungkus

Sekarang Anda mungkin telah sampai pada kesimpulan bahwa mengubah orientasi suatu objek dengan tangan bukanlah hal yang menyenangkan. Dan hasilnya juga tidak terlalu interaktif. Bulan depan saya akan menunjukkan kepada Anda bagaimana memanipulasi objek secara interaktif (dan kami akan membuat komputer melakukan semua angka-angka - lagipula, bukankah itu jenis komputer kerja yang seharusnya bagus?). Kami juga akan melihat masalah perspektif - khususnya, saya akan menunjukkan cara menggabungkannya ke dalam tampilan model kami.

Todd Sundsted telah menulis program sejak komputer tersedia dalam model desktop. Meskipun awalnya tertarik untuk membangun aplikasi objek terdistribusi di C ++, Todd pindah ke bahasa pemrograman Java ketika Java menjadi pilihan yang jelas untuk hal semacam itu. Todd adalah salah satu penulis SuperBible API Bahasa Java, sekarang ada di toko buku di mana-mana. Selain menulis, Todd adalah presiden Etcee, yang memberikan pelatihan, pendampingan, dan konsultasi yang berpusat pada Jawa.

Pelajari lebih lanjut tentang topik ini

  • Untuk sedikit tentang segala sesuatu yang berhubungan dengan grafik 3D, lihat:

    //www.3dsite.com/3dsite/

  • Yahoo menyediakan cara yang nyaman untuk memulai pencarian topik grafik 3D Anda

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Anda dapat mengunduh artikel ini, kode sumber, dan file kelas sebagai file tar gzip:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Artikel How-To Java sebelumnya
  • "Ketika gambar statis tidak berhasil" - Pelajari cara membumbui applet dan aplikasi Anda

    dengan gambar animasi.

  • "Bagaimana Java menggunakan model produsen / konsumen untuk menangani gambar - Pandangan orang dalam" - Pelajari lebih lanjut tentang teknik penanganan gambar Java yang hebat, kemudian ikuti prosedur sederhana saya untuk membuat komponen produsen dan konsumen Anda sendiri.
  • "Pelajari bagaimana applet memuat gambar berbasis jaringan secara asynchronous" - Berikut adalah pandangan dekat cara applet Java menangani gambar dalam lingkungan berbasis jaringan.
  • "Menggambar teks itu mudah dengan tiga kelas Java" - Temukan cara membuat teks yang menarik secara visual melalui penjelasan tentang kelas apa yang akan digunakan dan bagaimana mereka bekerja sama.
  • "Memeriksa HotSpot, program menggambar berorientasi objek" - Pelajari bagaimana potongan-potongan bahasa Java dan perpustakaan kelas cocok satu sama lain melalui studi tentang Java ini. program
  • "Menggunakan kelas Grafik" - Melihat dari dekat kelas Grafik dan gambar primitif yang disediakannya, dan demonstrasi penggunaannya.
  • "Observer and Observable" - Pengenalan antarmuka Observer dan kelas Observable menggunakan arsitektur Model / View / Controller sebagai panduan.
  • "Antarmuka pengguna yang efektif" - Pengenalan antarmuka Observer dan kelas Observable menggunakan arsitektur Model / View / Controller sebagai panduan.
  • "Java dan penanganan peristiwa" - Bagaimana peristiwa diteruskan ke komponen antarmuka pengguna, cara membuat penangan peristiwa, dan banyak lagi.
  • "Pengantar AWT" - Deskripsi toolkit antarmuka pengguna Java.

Kisah, "Grafik komputer 3D: Modelkan duniamu" ini awalnya diterbitkan oleh JavaWorld.