Grafik komputer 3D: Model dunia anda

Terokai dunia anda

Sejauh yang saya tahu, kita tidak boleh melengkapkan sedikit dunia kita secara langsung di dalam komputer (bagaimanapun, tidak merosakkan komputer). Yang terbaik yang boleh kita lakukan ialah membuat model komputer di dunia kita. Memandangkan batasan itu, misalnya, bagaimana kita memodelkan sesuatu seperti kerusi?

Objek di dunia kita mempunyai ciri, atau sifat, seperti bentuk, ukuran, berat, kedudukan, orientasi, dan warna (dan daftarnya terus berjalan). Mari kita pertimbangkan sejenak hanya bentuk, kedudukan, dan orientasi mereka - sifat inilah yang kita namakan sifat spasial . Kita mulakan dengan sesuatu yang lebih mudah untuk bekerja daripada kerusi - contohnya sebuah kubus.

Lihat ilustrasi dalam Rajah 1. Ini menunjukkan sebuah kubus duduk di bilik yang kosong. (Baiklah, bilik juga memiliki pintu, tapi itu hanya untuk menjadikan bilik kelihatan seperti bilik.)

Gambar 1: Sebuah bilik dengan kubus

Untuk menentukan bentuk, kedudukan, dan orientasi kubus, kita perlu menentukan lokasi setiap sudut. Untuk melakukan itu, kita boleh menggunakan bahasa seperti ini:

Sudut pertama adalah kaki (atau meter, jika anda suka) di atas lantai dan dua setengah kaki (atau meter) dari dinding di belakang saya. Sudut kedua juga kaki di atas lantai dan kaki dari dinding ke kiri saya.

Perhatikan bahawa kedua-dua 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 rujukan, tetapi ternyata lebih mudah untuk memilih satu titik rujukan (yang akan kita namakan asalnya ) dan menggunakannya. Untuk asal kami, kami akan menggunakan sudut yang dibentuk oleh dua dinding dan lantai. Gambar 2 menunjukkan lokasi asal kita.

Gambar 2: Asal dan paksi koordinat

Sekarang kita perlu menunjukkan di mana setiap sudut terletak berkenaan dengan asalnya. Anda boleh menentukan jalan dari asal ke sudut kubus dengan beberapa cara. Untuk kesederhanaan, kita mesti bersetuju dengan standard. Mari lakukan perkara berikut:

Bayangkan bahawa setiap tepi yang dibentuk oleh persimpangan dinding dan dinding, atau dinding dan lantai, diberi nama - kita akan memanggilnya paksi x , paksi y , dan paksi z , seperti yang ditunjukkan dalam Rajah 2. Dan mari kita juga bersetuju di hadapan bahawa kita akan menentukan lokasi sudut dengan mengikuti resipi ini:

  • Pertama, ukur sejauh mana kita harus bergerak dari asal dalam garis lurus selari dengan paksi x
  • Kemudian, ukur sejauh mana kita harus bergerak dari titik itu dalam garis lurus selari dengan paksi y
  • Akhirnya, ukur sejauh mana kita harus bergerak dari titik itu dalam garis lurus selari dengan paksi z

Gambar 3 menunjukkan jalan yang akan kita lalui untuk menuju ke salah satu sudut kubus.

Gambar 3: Mencari jalan anda

Sebagai notasi ringkas, mari tulis semua jarak ini sebagai:

  • Jarak dari asal selari dengan paksi x
  • Jarak dari asal selari dengan paksi y
  • Jarak dari asal selari dengan paksi z

atau (lebih pendek):

(jarak x, jarak y, jarak z) 

Nilai tiga ini dipanggil koordinat sudut . Kita dapat menentukan kedudukan di ruang setiap sudut dengan cara yang serupa. Contohnya, kita dapati bahawa kubus adalah contoh ini mempunyai sudut di:

(3 feet, 1 foot, 2 feet)

atau

(3 feet, 1 foot, 3 feet)

atau

(4 feet, 1 foot, 2 feet)

dan sebagainya.

Unit ukuran (kaki atau meter, misalnya) tidak penting untuk tujuan kita. Yang penting adalah bagaimana unit memetakan ke unit standard harta tanah skrin - piksel. Saya akan bercakap lebih banyak mengenai pemetaan itu sedikit kemudian.

Menjadi sedikit gelisah

Lokasi sudut kubus menentukan kedudukan dan orientasi kubus. Namun, hanya dengan koordinat sudut, kita tidak dapat membina semula kubus (lebih kurang kerusi). Kita benar-benar perlu mengetahui di mana pinggirnya, kerana tepi menentukan bentuknya.

Semua tepi mempunyai satu ciri yang sangat bagus - mereka selalu bermula dan berakhir di sudut. Jadi, jika kita tahu di mana semua pinggirnya, kita pasti akan tahu di mana semua sudut itu.

Sekarang kita akan membuat satu andaian penyederhanaan besar. Dalam model dunia kita, kita akan melarang tepi melengkung (anda akan mengetahui mengapa nanti); bahagian tepi mestilah garis lurus. Untuk menghampiri tepi melengkung, kami akan meletakkan tepi lurus dari ujung ke ujung, seperti pada Gambar 4.

Gambar 4: Pendekatan garis lurus lengkung

Tepi kemudian menjadi tidak lebih dari segmen garis sederhana. Dan segmen garis ditentukan oleh koordinat titik permulaan dan akhir mereka. Oleh itu, model objek tidak lebih dari sekumpulan segmen garis yang menggambarkan bentuknya.

Visualisasi: Bukan hanya untuk bersantai lagi

Sekarang kita tahu bagaimana memodelkan objek, kita siap mengatasi masalah mewakili model di layar komputer.

Anggaplah skrin komputer sebagai tingkap ke dunia maya kita. Kami duduk di satu sisi tingkap, dan dunia maya duduk di sebelah yang lain. Rajah 5 menggambarkan konsep ini.

Gambar 5: Tetingkap kita ke dunia maya

Terdapat banyak cara untuk meletakkan maklumat dalam model di tetingkap (atau skrin komputer). Mungkin yang paling sederhana adalah apa yang disebut unjuran isometrik .

Kerana model kami mempunyai tiga dimensi dan layar komputer hanya memiliki dua, kami dapat memetakan model ke layar dengan terlebih dahulu mengeluarkan koordinat z (ketiga dari tiga koordinat) dari setiap titik dalam model. Ini meninggalkan 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. Kami dapat menggunakan langkah-langkah ini di tempat menarik mana pun untuk model untuk mengetahui di mana ia akan muncul di layar.

Ternyata, tidak perlu mengubah setiap titik dalam model kita dengan cara ini. Salah satu akibat daripada mendekati setiap kelebihan model dengan segmen garis adalah bahawa kita benar-benar hanya perlu mengubah titik akhir segmen garis, bukan setiap titik pada segmen garis. Ini benar kerana unjuran sederhana (seperti unjuran isometrik) selalu mengubah segmen garis menjadi segmen garis - segmen garis tidak menjadi lengkung. Oleh itu, setelah anda mengetahui kedudukan titik akhir yang berubah, kita dapat menggunakan rutin lukisan garis terpasang AWT untuk menarik segmen garis itu sendiri.

Saya rasa contohnya mungkin teratur. Saya akan membuat tiga model sederhana dengan bentuk yang sama dalam pelbagai arah.

Jadual 1 mengandungi data yang menggambarkan bentuk sederhana pada kedudukan pertama. Setiap baris dalam jadual sepadan dengan kelebihan. Jadual memberikan koordinat titik permulaan dan akhir tepi. Anggaplah kita melihat bentuk dari luar di sepanjang paksi z.

Segmen Mulakan Tamat
x y z x y z
A 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
Jadual 1: Data untuk bentuk sederhana - kedudukan pertama

Applet dalam Rajah 6 menunjukkan apa yang akan kita lihat.

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini. Gambar 6: Bentuk sederhana - kedudukan pertama

Sekarang mari kita putar bentuknya beberapa darjah. Jadual 2 mengandungi data yang menggambarkan bentuk yang sama pada kedudukan keduanya. Perhatikan, hanya kedudukan dan orientasi yang telah berubah, bukan bentuknya.

Segmen Mulakan Tamat
x y z x y z
A 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
Jadual 2: Data untuk bentuk sederhana - kedudukan kedua

Applet dalam Rajah 7 menunjukkan apa yang akan kita lihat.

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini. Gambar 7: Bentuk sederhana - kedudukan kedua

Tiga adalah daya tarikan, jadi mari kita putar sekali lagi - kali ini naik beberapa darjah. Jadual 3 mengandungi data yang menggambarkan bentuk di kedudukan ketiga.

Segmen Mulakan Tamat
x y z x y z
A 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
Jadual 3: Data untuk bentuk sederhana - kedudukan ketiga

Applet dalam Rajah 8 menunjukkan apa yang akan kita lihat.

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini. Gambar 8: Bentuk sederhana - kedudukan ketiga

Mengakhiri

Sekarang anda mungkin telah membuat kesimpulan bahawa mengubah orientasi objek dengan tangan bukanlah sesuatu yang menyeronokkan. Hasilnya juga tidak terlalu interaktif. Bulan depan saya akan menunjukkan kepada anda cara memanipulasi objek secara interaktif (dan kita akan membuat komputer melakukan semua angka - walaupun begitu, bukankah jenis komputer kerja sepatutnya bagus?). Kami juga akan melihat masalah perspektif - khususnya, saya akan menunjukkan kepada anda bagaimana memasukkannya ke dalam pandangan model kami.

Todd Sundsted telah menulis program sejak komputer tersedia dalam model desktop. Walaupun awalnya berminat untuk membangun aplikasi objek terdistribusi di C ++, Todd beralih ke bahasa pengaturcaraan Java ketika Java menjadi pilihan yang jelas untuk hal semacam itu. Todd adalah pengarang bersama Java Language API SuperBible, kini berada di kedai buku di mana sahaja. Selain menulis, Todd adalah presiden Etcee, memberikan latihan, bimbingan, dan konsultasi yang berpusat pada Java.

Ketahui lebih lanjut mengenai topik ini

  • Untuk sedikit perkara yang berkaitan dengan grafik 3D, lihat:

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

  • Yahoo menyediakan cara mudah untuk memulakan carian anda untuk topik grafik 3D

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

  • Anda boleh memuat turun artikel ini, kod sumber, dan fail kelas sebagai fail tar yang dizipkan:

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

  • Artikel How-To Java sebelumnya
  • "Apabila gambar statik tidak membuat potongan" - Pelajari cara membumbui applet dan aplikasi anda

    dengan gambar animasi.

  • "Bagaimana Java menggunakan model pengeluar / pengguna untuk menangani gambar - Tampilan orang dalam" - Ketahui lebih lanjut mengenai teknik pengendalian imej Java yang kuat, kemudian ikuti prosedur mudah saya untuk membina komponen pengeluar dan pengguna anda sendiri.
  • "Ketahui bagaimana applet memuatkan gambar berdasarkan rangkaian secara tidak segerak" - Berikut adalah cara yang dekat dengan cara applet Java mengendalikan gambar dalam persekitaran berasaskan rangkaian.
  • "Menggambar teks mudah dengan tiga kelas Java" - Cari tahu bagaimana membuat teks yang menarik secara visual melalui penjelasan ini mengenai kelas mana yang akan digunakan dan bagaimana mereka bekerja bersama.
  • "Memeriksa HotSpot, program menggambar berorientasi objek" - Pelajari bagaimana potongan bahasa Java dan perpustakaan kelas cocok bersama melalui kajian Java ini. program
  • "Menggunakan kelas Grafik" - Melihat kelas Grafik dan primitif lukisan yang disediakannya, dan demonstrasi penggunaannya.
  • "Observer and Observable" - Pengenalan kepada antara muka Observer dan kelas Observable yang menggunakan seni bina Model / View / Controller sebagai panduan.
  • "Antara muka pengguna yang berkesan" - Pengenalan kepada antara muka Observer dan kelas Observable yang menggunakan seni bina Model / View / Controller sebagai panduan.
  • "Java dan pengendalian acara" - Bagaimana peristiwa diteruskan ke komponen antara muka pengguna, cara membuat pengendali acara, dan banyak lagi.
  • "Pengenalan kepada AWT" - Huraian kit alat antara muka pengguna Java.

Kisah ini, "Grafik komputer 3D: Model dunia anda" pada awalnya diterbitkan oleh JavaWorld.