Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Z-Buffer หรือวิธี Depth-Buffer ใน C++


z-buffer หรือที่เรียกว่า deep-buffer เป็นวิธีการที่ใช้สำหรับการตรวจจับพื้นผิวที่ซ่อนอยู่

การตรวจจับพื้นผิวที่ซ่อนอยู่

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

ใน z-buffer เราจะเปรียบเทียบพื้นผิวในแกน z เป็นความลึก

อัลกอริทึม

Step 1: initialize the depth of all pixel max.
   d(i,j) = infinity
Step 2: Initialize color for all pixels.
   c(i,j) = background-color
Step 3: for each pixel in polygon projection do,
   Step 3.1: find z i.e. depth of projection’s (i,j) pixel.
   Step 3.2: if z < d(i,j) do
      Step 3.2.1 : d(i,j) = z and c(i,j) = color of polygon.

โดยใช้วิธีนี้ทีละพิกเซล เราจะหาความลึกของแต่ละพิกเซลของระนาบ พื้นผิวที่เล็กที่สุดกำหนดสีของบัฟเฟอร์ โดยทั่วไป ค่า z ทั้งหมดจะใกล้เคียงกับ range[0,1]

z=0, ระนาบการหนีบด้านหลัง และ z=1, ระนาบการหนีบด้านหน้า

จุดสำคัญของบัฟเฟอร์ z

  • ไม่จำเป็นต้องใช้การจัดเรียงเริ่มต้นของรูปหลายเหลี่ยม (ระนาบ) เพื่อใช้วิธี z-buffer

  • Z-buffer ให้ผลลัพธ์ที่รวดเร็วแม้ว่าเครื่องบินจะมีจำนวนมากก็ตาม

  • ไม่จำเป็นต้องมีการเปรียบเทียบวัตถุในวิธี z-buffer

  • นอกจากนี้ยังสามารถตรวจจับวัตถุที่ซ่อนอยู่ที่ไม่ใช่รูปหลายเหลี่ยมได้โดยใช้วิธีนี้

  • ไม่ต้องการโครงสร้างข้อมูลเพิ่มเติมสำหรับการจัดเก็บและแก้ไข

  • การใช้ฮาร์ดแวร์ช่วยให้กระบวนการเร็วขึ้น และใช้ในการแก้ปัญหาเวิร์กสเตชันกราฟิก

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

  • การวาดพื้นผิวที่ซ่อนอยู่อาจเป็นกระบวนการที่ใช้เวลานาน