目前我想優化我的控制檯的3d引擎一點。更確切地說,我希望更好地緩存緩存,並使我的結構更加面向數據,但也希望保持良好的用戶界面。如何應用DOP並保持良好的用戶界面?
例如:
bool Init()
{
// Create a node
ISceneNode* pNode = GetSystem()->GetSceneManager()->AddNode("viewerNode");
// Create a transform component
ITransform* pTrans = m_pNode->CreateTransform("trans");
pTrans->SetTranslation(0,1.0f,-4.0f);
pTrans->SetRotation(0,0,0);
// Create a camera component
ICamera* pCam = m_pNode->CreateCamera("cam", pTrans);
pCam->LookAt(Math::Vec3d(0,0,0));
// And so on...
}
所以用戶可以在自己的代碼接口指針工作。
但
在我的引擎我目前存儲指向場景節點。
boost::ptr_vector<SceneNode> m_nodes
所以在面向數據的設計中,具有數組結構而不是結構數組是很好的做法。所以,我的節點會從...
class SceneNode
{
private:
Math::Vec3d m_pos;
};
std::vector<SceneNode> m_nodes;
這個...
class SceneNodes
{
std::vector<std::string> m_names;
std::vector<Math::Vec3d> m_positions;
// and so on...
};
所以我在這裏看到了兩個問題,如果我想申請DOP。 首先,我如何讓用戶界面不會讓用戶使用ID,索引等?
其次,如何讓一些向量調整大小而不讓用戶界面指針指向涅ana時如何處理屬性的重定位?
目前我的想法是實現一種handle_vector從中你得到一個句柄老大難「指針」:
typedef handle<ISceneNodeData> SceneNodeHandle;
SceneNodeHandle nodeHandle = nodeHandleVector.get_handle(idx);
所以當實習生的std ::向量調整大小,更新其手柄。 「句柄」存儲一個指向實際對象的指針,並且「 - >」操作符被重載以實現一個很好的包裝。但是這種方法對我來說聽起來有點複雜?!
您認爲如何?如何保持一個漂亮的界面,但保持認爲在內存連續更好的緩存使用?
感謝您的幫助!
什麼是DOP在你的使用? – 2010-10-06 16:50:06
在我的例子中,面向數據的編程是從數組結構到數組結構的轉換。 虛擬Update()方法從SceneNode中被取出,然後是SceneNodes結構的成員。所以我可以對我感興趣的陣列進行線性調整。 – VitaminCpp 2010-10-06 17:19:03