Saya sedang dalam proses menulis permainan isometrik dari awal, dan saya ingin tahu bagaimana / jika saya bisa menambahkan cahaya dan bayangan.
Kode yang saya miliki sejauh ini dapat ditemukan di sini , tetapi harus cukup untuk mengetahui bahwa sekarang , peta adalah array 3d sederhana dari nilai true / false . Ini adalah foto lingkungan:
Jika tilemap lapisan tunggal itu akan lurus ke depan. Saya bisa mengerti raycasting sederhana dalam 2d yang diperlukan.
Namun, mengingat bahwa peta saya memiliki ketinggian beberapa tingkat serta area seperti gua, saya tidak benar-benar tahu bagaimana cara melakukan bayangan meyakinkan untuk itu. Mungkin solusi per-blok adalah satu-satunya cara realistis?
Jawaban:
Dapatkah saya merekomendasikan agar bayangan 2d berfungsi terlebih dahulu, bahkan jika itu hanya untuk level saat avatar Anda aktif Akan lebih mudah untuk mulai melihat kode seperti itu dan membuatnya berfungsi.
Saya telah menerapkan bayangan dalam peta ubin 2d dalam beberapa cara. Salah satu metode shadowcasting yang saya temukan dijelaskan oleh Eric Lippert di Microsoft bekerja dengan sangat baik.
Dan cara lain, yang saya lakukan sendiri pertama kali saya melihat hal semacam ini adalah untuk secara ortogonal menyapu ubin terlihat dan tepi ubin dan menghasilkan tepi (dan mungkin sudut iirc) menggambarkan adegan dalam jumlah tepi terendah. Anda kemudian dapat menyisihkan tepi yang tersembunyi dan membentuk fitur bayangan kustom seperti bayangan tersembunyi jika Anda ingin menunjukkan sedikit dinding. Kemudian buat geometri bayangan Anda (pengecoran bayangan proyektif?) Dan render di atasnya.
Tetapi jika saya mencoba untuk mengambil ide itu ke 3d, itu menjadi lebih mudah untuk melakukannya dalam 3d. Sementara metode yang dijelaskan oleh Eric Lippert mungkin bisa dikonversi menjadi 3d. Tapi saya pikir Anda akan menemukan bahwa melakukannya dalam 3d itu mahal. Mungkin lihat juga kode sumber untuk Brogue . Ini mungkin memiliki implementasi yang lebih efisien untuk visibilitas 2d / pengecoran bayangan.
Semoga berhasil.
sumber