몇 개의 모듈로 구성된 게임 엔진을 작성 중입니다. 그 중 두 가지는 그래픽 엔진 과 물리 엔진 입니다.
데이터를 공유하는 것이 좋은 솔루션인지 궁금합니다.
두 가지 방법 (공유 여부)은 다음과 같습니다.
데이터를 공유하지 않고
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은 engine3D에서 기존 객체를 "어셈블"하는 것만으로 새로운 객체를 생성 할 수 없습니다 (어떻게 든 더 독립적 인 것처럼 보입니다)
- assingModel3D 함수에서 데이터 캐스트
- physicsEngine 및 graphicsEngine은주의해야합니다. 데이터가 필요 없을 때는 데이터를 삭제할 수 없습니다 (두 번째 데이터가 필요할 수 있기 때문에). 그러나 드문 상황입니다. 또한 객체가 아닌 포인터를 삭제할 수 있습니다. 또는 graphicsEngine이 객체를 삭제한다고 가정 할 수 있으며 physicsEngine은 객체에 대한 포인터 일뿐입니다.
어느 쪽이 더 낫습니까?
앞으로 어떤 문제가 더 많이 발생합니까?
나는 두 번째 솔루션을 더 좋아하지만 대부분의 그래픽 및 물리 엔진이 왜 첫 번째 엔진을 선호하는지 궁금합니다.
더 이상 숨겨진 장점과 대조가 있습니까?