Saya ingin memiliki pencahayaan 2D yang dapat diblokir oleh objek dalam game. Gim saya memiliki tampilan atas-bawah dan semua objek gim dijelaskan oleh segi empat.
Katakanlah saya memiliki dunia 10x10 dan saya menempatkan cahaya pada 1x1 dan dinding di sekeliling cahaya itu. Saya ingin dapat melihat sumber cahaya pada 1x1, tetapi tidak di tempat lain, karena terhalang oleh dinding.
Saya pernah mendengar tentang casting cahaya bekerja, tetapi bagaimana cara kerjanya?
opengl
2d
lighting
raycasting
LiquidFeline
sumber
sumber
Jawaban:
Amit Patel telah menulis artikel yang sangat bagus tentang casting sinar 2D.
Ini melibatkan pengecoran sinar ke masing-masing simpul di dalam kisaran sumber cahaya untuk membangun jaring cahaya.
Semua contoh visual bersifat interaktif di pos dan sangat mudah dimengerti.
Anda tidak harus membatasi diri pada sebuah kotak, batas yang Anda lacak dapat berupa bentuk apa pun yang Anda suka.
sumber
Anda harus menggunakan algoritma raycasting , yang berarti, Anda harus dapat menghitung persimpangan sinar (setengah-garis) dengan objek apa pun dalam adegan Anda (garis, bujur sangkar, lingkaran, segitiga ....) dan pilih persimpangan terdekat. Anda melemparkan sinar ke segala arah lalu "menarik cahaya" hanya ke objek terdekat.
Berikut ini tampilannya .
sumber
Jika Anda tahu apa itu ray casting, maka yang perlu Anda lakukan hanyalah hard-code-nya. Ini tidak terlalu rumit selama Anda memiliki koordinat untuk setiap titik.
Pertama, buat objek yang memancarkan cahaya. Tempatkan cahaya Anda di koordinat x, y.
Ini tidak dijamin berfungsi untuk poligon cekung, tetapi harus berfungsi dengan baik untuk setiap poligon cembung.
Ini akan berfungsi jika benda yang tersumbat (dinding, karakter, pemakan orang terbang ungu) dilukis ke layar setelah menerapkan pencahayaan. Kalau tidak, separuh dinding akan tampak lebih terang secara signifikan daripada separuh lainnya. Jika titik cahaya Anda sama dari dua pasang simpul pada dinding yang sama (tepat setengah dari ketinggian dinding Anda), terapkan segitiga ke dua simpul terdekat, daripada dua yang lebih jauh.
Saya juga harus menyebutkan bahwa metode ini membutuhkan titik simpul yang dibuat secara dinamis di mana ujung jari-jari cahaya bertemu dengan permukaan objek yang tersumbat. Ini menciptakan minimal 3 simpul untuk objek yang macet dan akan memungkinkan dinding yang melampaui jari-jari cahaya (atau dari layar) juga menghalangi cahaya.
Informasi lebih lanjut tentang polong cekung dan cembung
sumber