วันนี้ฉันเพิ่งเริ่มเรียนรู้ OpenGL จากบทช่วยสอนนี้: http://openglbook.com/the-book/
ฉันมาถึงบทที่ 2 ซึ่งฉันวาดรูปสามเหลี่ยมและฉันเข้าใจทุกอย่างยกเว้น VAO (ตัวย่อนี้ใช้ได้หรือไม่) บทช่วยสอนมีรหัสนี้:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
แม้ว่าฉันเข้าใจว่ารหัสนั้นจำเป็น แต่ฉันก็ไม่รู้ว่ามันทำอะไร แม้ว่าฉันจะไม่เคยใช้ VaoId เลยจุดนี้ (ยกเว้นจะทำลายมัน) แต่โค้ดก็ไม่ทำงานหากไม่มีมัน ฉันคิดว่านี่เป็นเพราะมันจำเป็นต้องถูกผูกมัด แต่ฉันไม่รู้ว่าทำไม รหัสที่แน่นอนนี้จำเป็นต้องเป็นส่วนหนึ่งของโปรแกรม OpenGL ทุกโปรแกรมหรือไม่ บทช่วยสอนอธิบาย VAO เป็น:
Vertex Array Object (หรือ VAO) เป็นอ็อบเจ็กต์ที่อธิบายวิธีการจัดเก็บแอ็ตทริบิวต์จุดยอดใน Vertex Buffer Object (หรือ VBO) ซึ่งหมายความว่า VAO ไม่ใช่ออบเจ็กต์จริงที่จัดเก็บข้อมูลจุดยอด แต่เป็นตัวบอกข้อมูลของจุดยอด แอตทริบิวต์ Vertex สามารถอธิบายได้ด้วยฟังก์ชัน glVertexAttribPointer และฟังก์ชันน้องสาวสองตัว glVertexAttribIPointer และ glVertexAttribLPointer ซึ่งเป็นฟังก์ชันแรกที่เราจะสำรวจด้านล่าง
ฉันไม่เข้าใจว่า VAO อธิบายแอตทริบิวต์จุดยอดอย่างไร ฉันไม่ได้อธิบายไว้ แต่อย่างใด ได้รับข้อมูลจาก glVertexAttribPointer หรือไม่ ฉันเดาว่าต้องเป็นอย่างนี้ VAO เป็นเพียงปลายทางสำหรับข้อมูลจาก glVertexAttribPointer หรือไม่
หมายเหตุด้านข้างบทช่วยสอนที่ฉันปฏิบัติตามเป็นที่ยอมรับหรือไม่ มีอะไรที่ฉันควรระวังหรือบทช่วยสอนที่ดีกว่าให้ทำตาม?