目前我想优化我的控制台的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