मैं खेल इंजन लिख रहा हूं जिसमें कुछ मॉड्यूल शामिल हैं। उनमें से दो ग्राफिक्स इंजन और भौतिकी इंजन हैं ।
मुझे आश्चर्य है कि अगर उनके बीच डेटा साझा करना एक अच्छा समाधान है?
दो तरीके (साझा करना या न करना) ऐसा दिखता है:
डेटा साझा किए बिना
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)
यहाँ समस्याएं:
- PhysEngine नई वस्तुओं का निर्माण नहीं कर सकता, बस इंजन 3 डी से मौजूदा "assing" (किसी तरह यह मेरे लिए और अधिक स्वतंत्र दिखता है)
- AssingModel3D फ़ंक्शन में डेटा कास्टिंग
- PhysEngEngine और graphicsEngine सावधान रहना चाहिए - वे डेटा को नष्ट नहीं कर सकते जब उन्हें उनकी आवश्यकता नहीं है (क्योंकि दूसरे को इसकी आवश्यकता हो सकती है)। लेकिन यह दुर्लभ स्थिति है। इसके अलावा, वे सिर्फ पॉइंटर को हटा सकते हैं, ऑब्जेक्ट को नहीं। या हम मान सकते हैं कि graphicsEngine वस्तुओं को हटा देगा, PhysEngine सिर्फ उनके लिए संकेत देता है।
कौन सा तरीका बेहतर है?
जो भविष्य में और अधिक समस्याएं पैदा करेगा?
मुझे दूसरा समाधान अधिक पसंद है, लेकिन मुझे आश्चर्य है कि अधिकांश ग्राफिक्स और भौतिकी इंजन पहले वाले को पसंद करते हैं (शायद इसलिए कि वे आम तौर पर केवल ग्राफिक्स या केवल भौतिकी इंजन बनाते हैं और कोई और उन्हें खेल में जोड़ता है?)।
क्या उनके पास और अधिक छिपे हुए नियम और विरोधाभास हैं?