ฉันจะนำแสงและเงาไปใช้ในแผนที่ย่อยหลายชั้น 2 มิติได้อย่างไร


11

ฉันอยู่ในขั้นตอนการเขียนเกมมีมิติเท่ากันตั้งแต่เริ่มต้นและฉันต้องการทราบว่าฉันสามารถเพิ่มแสงและเงาได้อย่างไร

รหัสที่ฉันได้จนถึงสามารถพบได้ที่นี่แต่มันควรจะเพียงพอที่จะรู้ว่าตอนนี้แผนที่มีอาร์เรย์ 3 มิติที่เรียบง่ายของจริง / เท็จค่า นี่คือภาพของสภาพแวดล้อม:สกรีนช็อตของแผ่นกระเบื้องหลายเลเยอร์

หากเป็นเลเยอร์แผ่นเดียวมันจะตรงไปข้างหน้า ฉันสามารถเข้าใจ raycasting อย่างง่าย ๆ ใน 2d ที่จำเป็น

อย่างไรก็ตามเนื่องจากแผนที่ของฉันมีความสูงหลายระดับเช่นเดียวกับบริเวณที่เป็นเหมือนถ้ำฉันจึงไม่รู้ว่าจะทำอย่างไรเพื่อให้เกิดเงาที่น่าเชื่อถือ บางทีวิธีต่อบล็อกเป็นวิธีที่เหมือนจริงหรือไม่?


คุณกำลังมองหาแสงที่สร้างไว้ล่วงหน้าหรือที่สร้างขึ้นแบบไดนามิกหรือไม่? “ พื้นที่ที่มีลักษณะเหมือนถ้ำ” ถูกตัดออกหรือไม่หากผู้เล่นเดินเข้ามาหรือมีแสงจำเป็นต้องพิจารณาเพดานด้วยหรือไม่? คุณคาดหวังว่าไพ่แต่ละใบจะเป็นเลขฐานสองสว่าง / มืดหรือมีค่าเศษส่วนบ้างไหม?
Anko

1
@ Anko ฉันต้องการเศษส่วนบางอย่างเช่น 0 - 1.1 (สำหรับพื้นที่ที่สว่างมากเช่นการระเบิด ฯลฯ ) แต่มันอาจเป็นเพียงการบล็อกโดยไม่มีการแก้ไขที่แท้จริงหรืออะไรแบบนั้น ฉันต้องการให้มันเป็นแบบไดนามิกและสนับสนุนไฟหลายดวง และในขณะที่พื้นที่ "เหมือนถ้ำ" / หลังคาจะถูกตัดออกไปอัลโก้จะต้องพิจารณาบล็อกที่ไม่ได้ถูกแสดงเมื่อคำนวณแสง ตัวอย่างเช่นถ้าคุณเดินเข้าไปในบ้านตึกหลังคาจะหายไป แต่ก็ควรจะอยู่ในที่ร่ม
Danie Clawson

หากคุณมองหาวิธีแก้ปัญหาเช่นนั้นด้วยถ้ำและความสูงดูเหมือนว่าคุณไม่มี 2D คุณอาจกำลังมองหาวิธีแก้ปัญหา 3 มิติเต็มรูปแบบแม้ว่ากล้องจะมองทิศทางทิศเหนือ -45 องศา คุณควรดูที่เทคนิคเช่นลายฉลุเงาหรือคล้ายกัน
Adrian Maire

ฉันสอง @AdrianMaire คุณจะต้องทำการคำนวณแบบ 3 มิติที่เหมาะสม แต่ทำทางลัดบางอย่างหากไม่มีการแก้ไขข้ามหน้า "ไทล์" หากคุณไม่ได้ทำการแก้ไขคุณอาจใช้รังสี
NeomerArcana

ตอนนี้ฉันยังไม่มีพื้นที่จิตใจที่จะแยกย่อยมันออกเป็นคำตอบ แต่ฉันเพิ่งสะดุดกับโพสต์บล็อกนี้เกี่ยวกับการกำหนดแนวสายตาสำหรับภูมิประเทศแผนที่ความสูง ดูเหมือนว่าคุณกำลังมองหา
Anko

คำตอบ:


1

ฉันขอแนะนำให้ให้เงา 2d ทำงานก่อนได้หรือไม่แม้ว่าจะเป็นเพียงระดับที่อวตารของคุณเปิดอยู่ การเริ่มต้นดูรหัสนั้นจะง่ายขึ้นและทำงานได้ง่ายขึ้น

ฉันใช้เงาในแผนที่ย่อย 2d ได้สองวิธี วิธีการสร้างเงาหนึ่งครั้งที่ฉันพบโดยEric Lippert ที่ Microsoft นั้นทำได้ค่อนข้างดี

และวิธีที่ฉันทำเองครั้งแรกที่ฉันมองสิ่งนี้คือการกวาดกระเบื้องและขอบกระเบื้องที่มองเห็นได้ในมุมฉากและสร้างขอบ จากนั้นคุณสามารถคัดสรรขอบที่ซ่อนไว้และสร้างคุณลักษณะการแรเงาแบบกำหนดเองใด ๆ เช่นเงาที่ซ่อนอยู่หากคุณต้องการแสดงกำแพงเล็กน้อย จากนั้นสร้างรูปทรงเงาของคุณ (การฉายเงาแบบ projective?) และสร้างมันขึ้นมาด้านบน

แต่ถ้าฉันลองคิดแบบสามมิติมันจะง่ายกว่าที่จะทำในแบบ 3 มิติ ในขณะที่วิธีการที่อธิบายโดย Eric Lippert น่าจะถูกแปลงเป็น 3d แต่ฉันคิดว่าคุณจะพบว่าการทำแบบ 3 มิติมีราคาแพง อาจดูรหัสแหล่งที่มาสำหรับBrogueเช่นกัน อาจมีการนำไปใช้อย่างมีประสิทธิภาพมากขึ้นสำหรับการมองเห็น / การส่งเงา 2 มิติ

โชคดี.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.