Bisakah seseorang tolong jelaskan bagaimana mungkin untuk membuat simpul bola, indeks dan koordinat tekstur? Ada kekurangan dokumentasi yang mengejutkan tentang bagaimana melakukannya dan itu adalah sesuatu yang saya tertarik untuk pelajari.
Saya sudah mencoba yang jelas, googling, mencari di gamedev.net, dll. Namun, tidak ada yang mencakup generasi titik bola, pengindeksan, dan texturing.
rendering
geometry
procedural-generation
judeclarke
sumber
sumber
Jawaban:
Ada dua pendekatan umum:
Yang paling kiri disebut uv-sphere dan yang paling kanan adalah icosphere.
GLUT cenderung menggunakan pendekatan uv: lihat fungsi
glutSolidSphere()
dalam kode sumber freeglut .Berikut ini adalah artikel yang sangat baik tentang cara menghasilkan icosphere: http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
Anda juga dapat menemukan ini menarik: http://kiwi.atmos.colostate.edu/BUGS/geodesic/text.html ini menggambarkan pendekatan untuk mengatur wajah ke dalam zona.
http://vterrain.org/Textures/spherical.html memberikan deskripsi yang sangat baik tentang bagaimana Anda dapat memilih untuk tekstur mereka.
sumber
Ada 2 cara untuk melakukannya:
Berjalanlah theta dan phi dalam koordinat bola, menghasilkan wajah dan tris
Buat icosahedron dan membagi wajah secara rekursif sampai tessellation yang diinginkan tercapai.
Bola menggunakan koordinat bola berjalan
Untuk cara pertama, Anda hanya menggunakan sarang ganda untuk berjalan theta dan phi. Saat Anda berjalan theta dan phi, Anda memutar segitiga untuk membuat bola Anda.
Kode yang melakukannya akan terlihat seperti ini:
Jadi perhatikan di atas, penting untuk memutar tutup atas dan tutup bawah hanya menggunakan tris, bukan paha depan.
Lingkungan Icosahedral
Untuk menggunakan icosahedron, Anda hanya menghasilkan titik-titik icosahedron dan kemudian menghasilkan segitiga dari itu. The simpul dari sebuah icosahedron duduk di asal adalah:
Anda kemudian harus melihat diagram icosahedron dan wajah angin dari verts tersebut. Saya sudah punya kode yang melakukannya di sini .
sumber
Jika titik tidak harus seragam secara lokal, tetapi harus seragam global, dan tidak harus mengikuti pola pengaturan apa pun, Anda dapat menggunakan varian algoritma pelemparan panah untuk mendistribusikan n titik pada bola dengan jari-jari r , rata-rata dist poin terpisah. Nilai-nilai ini kemudian kira-kira:
Dalam kasus paling sederhana, Anda kemudian dapat secara seragam memilih titik secara acak dengan memilih dua variabel terdistribusi seragam u dan v dari (0, 1) dan menghitung koordinat kutub dari mereka sesuai dengan rumus θ = 2 × π × u dan ϕ = arc cos (2 × v - 1); kemudian mengabaikan poin yang terletak terlalu dekat dengan poin yang sudah dipilih. Untuk algoritma yang sedikit lebih kompleks dan berkinerja lebih baik, lihat " Dart Throwing on Surface" oleh Cline, Jeschke, White, Razdan dan Wonka.
Setelah Anda mengambil empat poin pertama Anda (dengan asumsi tidak ada tiga dari mereka yang merosot , yaitu - mereka tidak terletak pada lingkaran besar yang sama, tapi itu sangat tidak mungkin), Anda dapat membuat empat wajah di antara mereka, dan setiap kali Anda menambahkan titik baru, Anda dapat membagi wajah itu miliknya menjadi tiga sub-wajah.
Untuk keperluan texturing, Anda dapat memetakan titik ke peta kubus.
sumber