ฉันกำลังพัฒนาเกม 2D แบบเทพดาสำหรับแพลตฟอร์มมือถือและฉันใช้ OpenGL (จริง ๆ แล้ว Irrlicht) เพื่อสร้างภาพกราฟิก ครั้งแรกที่ฉันใช้สไปรท์เรนเดอร์ด้วยวิธีง่าย ๆ : ทุก ๆ เกมจะแสดงผลเป็นรูปสี่เหลี่ยมด้วยการเรียกการวาดด้วย GPU ของตัวเองซึ่งหมายความว่าถ้าฉันมีวัตถุในเกม 200 รายการฉันทำการโทร 200 ครั้งต่อเฟรม แน่นอนว่านี่เป็นตัวเลือกที่ไม่ดีและเกมของฉันมีซีพียูที่เชื่อมโยงอย่างสมบูรณ์เพราะมีค่าใช้จ่ายซีพียูเล็กน้อยในการเรียกใช้ GPU ทุกครั้ง GPU อยู่เฉยตลอดเวลา
ตอนนี้ฉันคิดว่าฉันสามารถปรับปรุงประสิทธิภาพได้โดยการรวบรวมวัตถุเป็นชุดใหญ่และแสดงชุดเหล่านี้ด้วยการเรียกสายเพียงไม่กี่ครั้ง ฉันใช้การแบทช์ (เพื่อให้ทุกเกมของวัตถุที่แชร์พื้นผิวเดียวกันมีการแสดงผลเป็นแบทช์เดียวกัน) และคิดว่าปัญหาของฉันหมดไป ... เพียงเพื่อจะพบว่าอัตราเฟรมของฉันต่ำกว่าเดิม
ทำไม? ฉันมีวัตถุเกม 200 (หรือมากกว่า) และพวกมันได้รับการอัพเดท 60 ครั้งต่อวินาที ทุกเฟรมที่ฉันต้องคำนวณตำแหน่งใหม่ (การแปลและการหมุน) สำหรับจุดยอดในซีพียู (GPU บนแพลตฟอร์มมือถือไม่รองรับการติดตั้งดังนั้นฉันจึงไม่สามารถทำได้ที่นั่น) และทำการคำนวณนี้ 48000 ต่อวินาที (200 * 60 * 4 ตั้งแต่ เทพดาทุกคนมี 4 จุดยอด) ดูเหมือนว่าจะช้าเกินไป
ฉันจะทำอย่างไรเพื่อปรับปรุงประสิทธิภาพ วัตถุในเกมทั้งหมดกำลังเคลื่อนที่ / หมุน (เกือบ) ทุกเฟรมดังนั้นฉันต้องคำนวณตำแหน่งจุดสุดยอดใหม่ การปรับให้เหมาะสมที่สุดที่ฉันคิดได้คือตารางค้นหาสำหรับการหมุนเพื่อที่ฉันจะได้ไม่ต้องคำนวณมัน สไปรต์ชี้จะช่วยได้อย่างไร มีแฮ็คที่น่ารังเกียจบ้างไหม? มีอะไรอีกไหม
ขอบคุณ