Pengaturcaraan grafik 3D di Java, Bahagian 3: OpenGL

Sudah lama sejak ansuran terakhir kami dalam siri ini pada pengaturcaraan grafik 3D di Java (lebih banyak lagi pada akhir lajur ini). Inilah penyegaran ringkas mengenai perkara yang terakhir kita bincangkan dan di mana kita berhenti.

Dalam dua lajur sebelumnya (lihat Sumber), kami menjelajah Java 3D. Kami membincangkan kandungan statik dan pemandangan kecil, kemudian menggunakan grafik pemandangan yang lebih besar dan membina interaktiviti ke dalam beberapa dunia 3D asas.

Setelah anda mengetahui sedikit tentang menggunakan Java 3D, sudah waktunya untuk membandingkan dan membezakan pendekatan Java 3D untuk grafik 3D dengan pesaing API grafik terkemuka: OpenGL.

Harap maklum bahawa artikel ini pada asalnya dimaksudkan untuk menggunakan kod, tetapi keputusan akhir yang dibuat oleh Arcane Technologies mengenai pengikatan Penyihir (lihat di bawah) memerlukan penghapusan contoh kod tersebut. Saya harap kandungan artikel ini dapat disesuaikan untuk mengikat Java-OpenGL di masa mendatang, namun belum tersedia dari OpenGL Consortium.

Walau apa pun, saya telah berusaha untuk memberikan semua rujukan dan URL yang berkaitan dengan OpenGL yang relevan dan berguna di Sumber di akhir lajur ini. Sekiranya anda ingin menggali lebih jauh ke Java-OpenGL, saya sangat mengesyorkan agar anda menyemak rujukan ini.

Perbandingan Java-OpenGL dengan Java 3D

Dalam ansuran sebelumnya pada Java 3D, saya memberikan senarai kelebihan dan kekurangan penggunaan Java 3D untuk aplikasi grafik. Mari kita buat semula senarai itu, tetapi lakukan dengan melihat kekuatan dan kelemahan penyelesaian berasaskan Java-OpenGL dan bukannya penyelesaian berasaskan Java 3D.

Kekuatan menggunakan OpenGL (dan, dengan pelanjutan dan di mana diperhatikan, pengikatan Java-OpenGL):

  • OpenGL menyediakan model grafik model prosedur

    Ini sangat sesuai dengan banyak algoritma dan kaedah yang telah digunakan oleh pengaturcara grafik secara sejarah. Model prosedur sekaligus intuitif dan mudah untuk banyak penggemar grafik 3D yang berjaya.

  • OpenGL menyediakan akses langsung ke saluran rendering

    Ini berlaku dengan salah satu dari pelbagai pengikatan bahasa, termasuk kebanyakan pengikatan Java. OpenGL memberi kuasa kepada pengaturcara untuk secara langsung menentukan bagaimana grafik harus diberikan. Orang tidak hanya mengisyaratkan dan meminta seperti dengan Java 3D, seseorang menetapkan.

  • OpenGL dioptimumkan dengan setiap cara yang dapat dibayangkan

    OpenGL dioptimumkan dalam perkakasan dan perisian dan platform yang disasarkan mulai dari PC dan konsol permainan termurah hingga superkomputer grafik termaju.

  • Penjual dari semua jenis perkakasan berkaitan grafik 3D menyokong OpenGL

    OpenGL adalah

    yang

    standard yang mana vendor perkakasan mengukur teknologi grafik mereka, tanpa had. Oleh kerana Microsoft telah bergabung dengan SGI dalam inisiatif Fahrenheit, telah menjadi semakin jelas bagi banyak pihak bahawa ini berlaku pengakuan tidak langsung Microsoft bahawa OpenGL memenangkan perang API untuk grafik 2D dan 3D.

Sebaliknya, tidak ada yang sempurna. OpenGL, dan tentu saja pengikatan Java-OpenGL, mempunyai beberapa kekurangan yang ketara:

  • Kekuatan pendekatan prosedural untuk pengaturcaraan grafik serentak menjadi kelemahan bagi banyak pengaturcara Java

    Bagi pengaturcara yang agak baru, banyak di antaranya mungkin telah menerima arahan pengaturcaraan formal pertama mereka di Java menggunakan metodologi berorientasi objek, kaedah prosedur OpenGL tidak sesuai dengan pendekatan berorientasi objek dan praktik teknik yang baik.

  • Pengoptimuman OpenGL banyak vendor bertujuan untuk mengurangkan pilihan perkakasan

    Adalah menjadi kepentingan setiap vendor untuk membina sambungan proprietari dan membuat pengoptimuman proprietari untuk menjual lebih banyak perkakasannya sendiri. Seperti semua pengoptimuman perkakasan, anda mesti menggunakan pengoptimuman OpenGL khusus pemecut dengan pemahaman bahawa setiap pengoptimuman untuk satu platform mengurangkan kemudahan dan prestasi mudah alih untuk beberapa yang lain. Pengoptimuman tujuan 3D Java yang lebih umum kebanyakannya bertujuan untuk memaksimumkan mudah dibawa aplikasi Java 3D.

  • Walaupun antara muka C ke OpenGL ada di mana-mana, antara muka Java belum diseragamkan dan tidak tersedia secara meluas

    Produk Penyihir Arcane Technologies sehingga baru-baru ini berada di pasaran untuk mengubah masalah mudah alih ini, tetapi dengan kehancurannya terdapat banyak kisah lintas platform untuk Java-OpenGL, sekurang-kurangnya pada masa ini. Lebih lanjut mengenai perkara di bawah.

  • Pendedahan OpenGL mengenai perincian dalaman proses rendering boleh merumitkan program grafik 3D yang sederhana

    Kekuatan dan fleksibiliti datang pada harga kerumitan. Dalam kitaran pengembangan dunia teknologi masa kini yang pesat, kerumitan ada sesuatu yang harus dielakkan sekiranya mungkin. Pepatah lama mengenai pepijat adalah benar: semakin banyak baris kod, semakin banyak pepijat (secara umum).

Seperti yang anda lihat dari pro dan kontra untuk pendekatan berbasis OpenGL, Java-OpenGL kuat di banyak wilayah di mana Java 3D lemah. OpenGL memberikan programmer akses tahap rendah ke proses rendering yang dielakkan oleh Java 3D secara eksplisit, dan OpenGL kini tersedia di platform yang jauh lebih banyak daripada Java 3D (selain Magician). Tetapi fleksibiliti ini hadir dengan harga yang berpotensi: pengaturcara mempunyai banyak ruang untuk dioptimumkan, yang sebaliknya bermaksud mereka mempunyai banyak ruang untuk mengacaukan segalanya. Java 3D mempunyai pengoptimuman bawaan yang lebih banyak dan model pengaturcaraan yang lebih mudah yang terbukti sangat berguna bagi pengaturcara yang baru menggunakan Java, kerja grafik 3D, atau pengaturcaraan grafik rangkaian dan diedarkan.