วิธีจัดเก็บและจัดการแผนที่เกม 3 มิติ


9

ฉันเป็นโปรแกรมเมอร์ แต่ยังไม่ได้พัฒนาเกมใด ๆ

ฉันเล่นเกมสามมิติหลายอย่างและสงสัยอยู่เสมอว่าแผนที่ของฟิลด์ถูกเก็บและแสดงผลอย่างไร

ฉันรู้ว่าการ์ดเร่งความเร็วบางตัวเป็นฮาร์ดแวร์ที่จำเป็น แต่วิธีการเปลี่ยนมุมมองโดยไม่มีการสั่นไหวเพียงครั้งเดียวบนหน้าจอ

คุณมีสื่อออนไลน์ที่จะช่วยให้ฉันเข้าใจสิ่งนี้หรือไม่

ขอบคุณ

คำตอบ:


9

โดยทั่วไปแล้วแผนที่โลกจะมีรูปสามเหลี่ยมมากมายและแผนที่เป็นรายการของรูปสามเหลี่ยมเหล่านี้และตำแหน่งในโลกของแต่ละจุดสุดยอด กระบวนการในการวาดคือ:

  • ตั้งค่าตำแหน่งของ 'กล้อง' - ถ้าคุณยืนอยู่ในโลกนี่คือตำแหน่งที่คุณอยู่ในตำแหน่งโลก
  • เปลี่ยนจุดยอดสามเหลี่ยมเป็น 'พื้นที่กล้อง'
  • เปลี่ยนรูปสามเหลี่ยมจาก 'พื้นที่กล้อง' เป็น 'พื้นที่หน้าจอ' - นี่คือจุดที่เอฟเฟกต์แบบ perpective เกิดขึ้น (สิ่งที่อยู่ไกลกว่าจะเล็กกว่า) สามเหลี่ยมกลายเป็น 2D ณ จุดนี้
  • วาดรูปสามเหลี่ยม 2D ลงบนหน้าจอที่ซ่อนอยู่
  • เมื่อวาดสามเหลี่ยมทั้งหมดแล้วให้แสดงหน้าจอต่อผู้เล่น

ขั้นตอนสุดท้ายมักจะเชื่อมโยงกับอัตราเฟรมของจอภาพเพื่อให้กระบวนการแสดงหน้าจอที่ซ่อนอยู่ทำในช่วงเวลา v-blank - แนวคิดที่ได้จากจอภาพหลอดรังสีแคโทดซึ่งอนุญาตให้ลำแสงแคโทดเคลื่อนที่จากด้านล่างขวาไปด้านบน ไปทางซ้ายต้องใช้สิ่งนี้อย่างรวดเร็ว แต่ไม่ได้ตั้งใจเปลี่ยนแรงดันไฟฟ้าบนขดลวดโก่งที่ด้านหลังของหลอดเรย์

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

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

ไม่จำเป็นต้องใช้ฮาร์ดแวร์เฉพาะ - เกม 3 มิติก่อนหน้านี้มีในซอฟต์แวร์ (แม้กระทั่งบน CPU 8 บิตที่ไม่มี FPU) มันทำให้เร็วและง่ายต่อการทำ

เป็นคำถามง่าย ๆ ไม่มีคำตอบง่าย ๆ


0

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

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