Saya belum menemukan pertanyaan pada baris ini, koreksi saya jika saya salah.
Pohon (dan fauna secara umum) adalah hal biasa dalam permainan. Karena sifat mereka, mereka adalah kandidat yang baik untuk generasi prosedural.
Ada SpeedTree , tentu saja, jika Anda mampu membelinya; sejauh yang saya tahu, itu tidak memberikan kemungkinan menghasilkan jala pohon Anda saat runtime. Lalu ada SnappyTree , generator pohon berbasis webgl online berdasarkan proctree.js yang merupakan sekitar 500 baris javascript.
Orang dapat menggunakan salah satu dari yang di atas (atau generator pohon lain yang belum saya temui) untuk membuat beberapa lusin pohon sebelumnya - atau memodelkan mereka dari awal dalam modeller 3d - dan kemudian secara acak mirror / skala mereka untuk beberapa varian lagi ..
Tetapi saya lebih suka memiliki generator mesh pohon yang dapat dihubungkan gratis.
Solusi yang memungkinkan:
- Port proctree.js ke c ++ dan berurusan dengan lisensi open source (tampaknya tidak gpl, jadi bisa dilakukan; penulis juga mungkin bersedia bekerja sama untuk membuat lisensi lebih bebas lagi).
- Gulung sendiri berdasarkan L-sistem.
- Jangan ganggu, cukup gunakan pohon yang dibuat secara offline.
- Gunakan beberapa metode lain yang belum saya temukan.
Pembaruan 2015 : berakhir dengan porting proctree.js ke c ++ https://github.com/jarikomppa/proctree
sumber
Jawaban:
Saya telah melakukan sedikit pekerjaan yang adil di bidang ini, meskipun sebagian besar demo saya lebih tua:
(flash 2010)
http://genesisbbs.com/appstem.html (klik dan seret mouse)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795
Saya sangat menyarankan Anda untuk menggulung sendiri, jika Anda melakukan ini untuk bersenang-senang. Anda hampir pasti perlu bekerja dengan Quaternions . Memahami mereka sangat sulit, tetapi Anda tidak perlu terlalu dalam untuk menggunakannya. Pikirkan angka empat sebagai vektor dengan komponen tambahan: rotasi. Jika Anda ingin tanaman Anda berputar dan berbelok saat tumbuh, mereka akan membutuhkan angka empat.
Hal-hal lain yang perlu dipelajari:
Angka Lichtenberg,
Pertumbuhan Laplacian,
Diagram Voronoi,
Algoritma Tetangga Terdekat (google)
Saya (secara pribadi) akan mencegah penggunaan L-Systems, selain untuk mungkin mendikte tata bahasa untuk apa yang tumbuh di mana, yaitu [benih -> [root] / [batang-> cabang -> [bunga / daun]]. Sistem L tidak baik untuk menanggapi rangsangan lingkungan seperti arah sinar matahari, gravitasi, hambatan, dll.
Mengenai masalah kecepatan, satu pohon dapat dihasilkan secara realtime. Namun, untuk keperluan memori dan kinerja, Anda mungkin hanya ingin menghasilkan sekumpulan pohon kecil dan contohnya sedikit jika Anda berhadapan dengan hutan.
Kebanyakan generator pohon yang ada tidak begitu bagus (IMHO), selain yang high-end digunakan untuk Maya dan semacamnya.
Saya juga sangat, sangat merekomendasikan menggunakan voxels untuk menghasilkan pohon (kemudian kulit dengan mesh jika diperlukan). Keuntungan voxels adalah Anda dapat dengan mudah mensimulasikan algoritma pertumbuhan menggunakan hal-hal seperti pertumbuhan Laplacian dan berbagai automata (bukan permainan kehidupan Conway, tetapi aturan lain menghasilkan hasil yang menarik).
sumber
Secara pribadi saya mungkin akan mulai dengan pohon-pohon yang dihasilkan sebelumnya dan hanya sekali saya akan memiliki mesin rendering hutan kick-ass - lengkap dengan semak-semak, rumput, jamur dan barang-barang - saya akan mulai mencari jika saya membutuhkan lebih banyak jerat pohon variabel.
Yang sedang berkata, Anda bisa melihat ngPlant . Ini termasuk aplikasi pemodel pohon prosedural GPL, tetapi perpustakaan yang melakukan semua pekerjaan berat adalah lisensi BSD. Itu ditulis dalam C ++.
Untuk rendering hutan, ada Paged Geometry ( mesin berlisensi) untuk mesin rendering Ogre .
sumber
Masalah utama dengan pohon prosedural bukanlah menghasilkannya, tetapi merendernya semua setiap frame saat runtime. Ini adalah alasan Anda akan melihat banyak pohon identik di game AAA, bukan karena mereka tidak dapat mengimplementasikan atau menulis teknologi yang membuat pohon unik, itu berarti Anda harus memotong banyak fitur lain untuk permainan untuk berlari.
Jika Anda memiliki banyak pohon yang identik, Anda dapat memutarnya dan mungkin menskalakannya secara seragam untuk membuatnya terlihat berbeda dari setiap sudut, dan karena mereka identik, Anda dapat membuat mereka untuk menghemat milidetik berharga setiap frame.
Hanya memikirkan masalah ini sebentar, mungkin ada media yang membahagiakan - bagaimana jika Anda menghasilkan beberapa bagian pohon, batang, cabang, daun dll. Tetapi yang semuanya cocok secara modular, seperti lego pohon. Maka Anda bisa memiliki banyak kombinasi dan beberapa pohon yang cukup unik, tetapi Anda juga bisa membuat instance dari semua bagian untuk gim yang berjalan lebih cepat.
sumber
Saya menemukan pohon [d] beberapa waktu lalu ... Saya menggunakannya hanya untuk sedikit waktu untuk menguji suatu proyek, tetapi itu hanya karena saya menghentikan pengembangan - alat ini memberi Anda berbagai pilihan generator untuk dimainkan dan , dari yang saya ingat, cukup cepat. Tautan di bawah.
The downside adalah bahwa itu bukan generator pohon yang dapat Anda masukkan. Anda harus membuat beberapa pohon sebelumnya dan kemudian memodifikasi data saat menempatkannya pada saat run-time untuk mengubah keunikannya.
sumber
Ini adalah solusi kecil yang rapi, dan saya telah menggunakannya dalam sebuah proyek dan dapat memberitahu Anda bahwa ini cukup cepat untuk membuat pohon dengan cepat mengapa permainan ini berjalan. Ini tentu saja tidak rinci, tetapi jika Anda menyingkirkan papan iklan itu bisa sangat rapi.
http://ltrees.codeplex.com/
sumber