ฉันกำลังเขียนเอ็นจิ้นเกมที่ประกอบด้วยโมดูลไม่กี่ตัว สองของพวกเขาเป็นกราฟิกเครื่องยนต์และเครื่องยนต์ฟิสิกส์
ฉันสงสัยว่ามันเป็นทางออกที่ดีในการแบ่งปันข้อมูลระหว่างกันหรือไม่
สองวิธี (การแชร์หรือไม่) ดูเหมือนว่า:
โดยไม่ต้องแชร์ข้อมูล
GraphicsModel{
//some common for graphics and physics data like position
//some only graphic data
//like textures and detailed model's verticles that physics doesn't need
};
PhysicsModel{
//some common for graphics and physics data like position
//some only physics data
//usually my physics data contains A LOT more informations than graphics data
}
engine3D->createModel3D(...);
physicsEngine->createModel3D(...);
//connect graphics and physics data
//e.g. update graphics model's position when physics model's position will change
ฉันเห็นปัญหาหลักสองประการ:
- ข้อมูลที่ซ้ำซ้อนจำนวนมาก (เช่นสองตำแหน่งสำหรับข้อมูลฟิสิกส์และกราฟิก)
- ปัญหาในการอัปเดตข้อมูล (ฉันต้องอัปเดตข้อมูลกราฟิกด้วยตนเองเมื่อมีการเปลี่ยนแปลงข้อมูลฟิสิกส์)
ด้วยการแชร์ข้อมูล
Model{
//some common for graphics and physics data like position
};
GraphicModel : public Model{
//some only graphics data
//like textures and detailed model's verticles that physics doesn't need
};
PhysicsModel : public Model{
//some only physics data
//usually my physics data contains A LOT more informations than graphics data
}
model = engine3D->createModel3D(...);
physicsEngine->assingModel3D(&model); //will cast to
//PhysicsModel for it's purposes??
//when physics changes anything (like position) in model
//(which it treats like PhysicsModel), the position for graphics data
//will change as well (because it's the same model)
ปัญหาที่นี่:
- PhysicsEngine ไม่สามารถสร้างวัตถุใหม่เพียงแค่ "assing" วัตถุที่มีอยู่จาก engine3D (อย่างใดก็ดูต่อต้านฉันขึ้นสำหรับฉัน)
- กำลังส่งข้อมูลในฟังก์ชัน assingModel3D
- ฟิสิกส์เครื่องยนต์และกราฟิกเครื่องยนต์ต้องระวัง - พวกเขาไม่สามารถลบข้อมูลเมื่อพวกเขาไม่ต้องการพวกเขา (เพราะคนที่สองอาจต้องการมัน) แต่มันเป็นสถานการณ์ที่หายาก ยิ่งไปกว่านั้นพวกเขาสามารถลบตัวชี้ไม่ใช่วัตถุ หรือเราสามารถสันนิษฐานได้ว่ากราฟฟิกเอ็นจินจะลบวัตถุออกฟิสิกส์เอนจินเพียงแค่ชี้ไปที่มัน
ทางไหนดีกว่ากัน?
สิ่งใดจะทำให้เกิดปัญหามากขึ้นในอนาคต
ฉันชอบโซลูชันที่สองมากกว่า แต่ฉันสงสัยว่าทำไมเครื่องมือกราฟิกและฟิสิกส์ส่วนใหญ่จึงต้องการโซลูชั่นแรก (อาจเป็นเพราะพวกเขามักจะสร้างเฉพาะกราฟิกหรือเครื่องยนต์ฟิสิกส์เท่านั้น
พวกเขามีข้อดีและข้อด้อยที่ซ่อนอยู่อีกหรือไม่