วัตถุเฟรมบัฟเฟอร์
เฟรมบัฟเฟอร์ออบเจ็กต์ (FBO) เป็นส่วนขยายของOpenGLสำหรับการเรนเดอร์ภาพไปยังบัฟเฟอร์นอกหน้าจอ อย่างยืดหยุ่น รวมถึงการเรนเดอร์ไปยังบัฟเฟอร์พื้นผิว สามารถใช้ในการใช้งาน ฟิลเตอร์ภาพและ เอฟเฟ็กต์ การประมวลผลภาพหลังการ เรนเดอร์ ได้หลากหลายโดยการเรนเดอร์ภาพไปยังบัฟเฟอร์นอกหน้าจอก่อน จากนั้นจึงใช้เอฟเฟ็กต์ต่างๆ แล้วจึงส่งไปยังบัฟเฟอร์บนหน้าจอ
FBO (Finite Frame Observable) ถูกนำมาใช้ใน OpenGL เนื่องจากมีประสิทธิภาพและใช้งานง่าย การใช้ FBO ไม่ประสบปัญหาเรื่องโอเวอร์เฮดที่เกี่ยวข้องกับการสลับบริบท การวาดภาพใน OpenGL และได้เข้ามาแทนที่pbufferและวิธีการอื่นๆ ที่ใช้การสลับบริบทไป แล้วเป็นส่วนใหญ่
FBO นั้นคล้ายคลึงกับโมเดลrender targetsในDirectX
การใช้งาน
FBO มีการใช้งานหลักสองอย่าง ได้แก่ การประมวลผลภาพที่เรนเดอร์แล้ว และการจัดองค์ประกอบภาพระหว่างฉากต่างๆ ตัวอย่างเช่น:
- ภาพที่เรนเดอร์แล้วจะถูกจับภาพและนำไปใช้กับเชเดอร์แบบแฟรกเมนต์หรือการปรับแต่งอื่นๆ ซึ่งช่วยให้สามารถสร้างเอฟเฟ็กต์กราฟิกคอมพิวเตอร์ยอดนิยมในปัจจุบันได้มากมาย รวมถึงการเพิ่มเอฟเฟ็กต์เบลอหรือเอฟเฟ็กต์แสงฟุ้ง
- สามารถใช้สร้างมุมมองของฉากอื่นๆ ได้ เช่น โทรทัศน์ในบ้านที่แสดงภาพจากกล้องตัวที่สอง สามารถเรนเดอร์ฉากผ่าน FBO ไปยังพื้นผิว (texture) จากนั้นจึงนำพื้นผิวนั้นไปใช้กับพื้นผิวของโทรทัศน์ บางครั้งเรียกวิธีการนี้ว่า "เรนเดอร์ไปยังพื้นผิว" หรือ RTT (Render to Texture)
ข้อดีเหนือกว่าวิธีการอื่นๆ
วิธีการที่เกี่ยวข้องกับ FBO ถือว่าเหนือกว่าเนื่องจาก:
- การติดตั้งทำได้ง่ายกว่าวิธีการอื่นๆ ส่วนใหญ่
- ไม่จำเป็นต้องสลับบริบท
- มีประสิทธิภาพมากกว่าเพราะมีการใช้ทรัพยากรร่วมกันภายในบริบทเดียวกัน
- มีความยืดหยุ่นมากกว่า เนื่องจาก สามารถดึงข้อมูลจากบัฟเฟอร์ความลึกบัฟเฟอร์สเตนซิ ล ฯลฯ ได้ทั้งหมด
สถาปัตยกรรม
ในการใช้ FBO นั้น เพียงแค่สร้างอินสแตนซ์ของมันขึ้นมาเท่านั้น FBO จะมาพร้อมกับส่วนแนบหลายส่วน จากนั้นเราสามารถแนบส่วนแนบเหล่านี้เข้ากับตัวรับที่เลือกได้ ไม่ว่าจะเป็นพื้นผิวหรือบัฟเฟอร์การเรนเดอร์ FBO สามารถเปิดเผยจุดแนบสีได้หลายจุด (GL_COLOR_ATTACHMENT0 ขึ้นไป) และโดยปกติแอปพลิเคชันจะตรวจสอบว่าชุดส่วนแนบที่เลือกนั้นสมบูรณ์ในเฟรมบัฟเฟอร์ก่อนที่จะเรนเดอร์ไปยังเฟรมบัฟเฟอร์นั้น[ 1 ]
ตัวอย่างเช่น:
- สร้าง FBO และผูกเข้ากับระบบ
- แนบบัฟเฟอร์สี (ไม่ว่าจะเป็นในรูปแบบ RenderBuffer หรือ texture) เข้ากับ FBO
- แนบบัฟเฟอร์ความลึก (ไม่ว่าจะเป็นในรูปแบบ RenderBuffer หรือ texture) เข้ากับ FBO
- ผูกเฟรมบัฟเฟอร์ของหน้าต่างดั้งเดิม (id=0)
- แสดงพื้นผิวบนหน้าจอด้วยพิกเซลเชเดอร์ โดยขึ้นอยู่กับทั้งข้อมูลสีและข้อมูลความลึก
ลิงก์ภายนอก
- วัตถุเฟรมบัฟเฟอร์ในวิกิ OpenGL
- เอกสารทางเทคนิคเกี่ยวกับ Framebuffer object เก็บถาวรเมื่อวันที่ 2 พฤษภาคม 2013 ที่Wayback Machine
- การอ้างอิงวัตถุเฟรมบัฟเฟอร์ที่ OpenVidia
- ตัวอย่างโค้ดสำหรับ Windows และ Linux
- EXT Framebuffer (opengl.org)