[英]Depth first search sub meshes
我正在嘗試打印給定場景節點的所有子網格。這基本上是深度優先搜索。 我正在嘗試將json值輸出為1級,2級,直到最后一個孩子然后輸出“”
似乎我缺少一些我可能不理解遞歸的東西
更新:這是另一種嘗試:
void AssimpLoader::WriteSubMeshesToJson(const aiScene* mScene, const aiNode* pNode, Json::StyledWriter &writer, std::ofstream &myfile, int level, Json::Value root )
{
// if we have meshes
if( pNode == nullptr)
{
// write to disk
Ogre::LogManager::getSingleton().logMessage(" for mesh '" + Ogre::String( pNode->mName.data ) + "'" );
Json::Value parameter;
parameter["level0"];
root.append(parameter);
std::string output = writer.write(root);
myfile << output;
level = 0;
}
else
{
Json::Value parameter;
level++;
parameter["Level " + std::to_string(level)] = Ogre::String( pNode->mName.data) ;
root.append(parameter);
std::string output = writer.write(root);
myfile << output;
}
// Traverse all child nodes of the current node instance
for( unsigned int childIdx=0; childIdx < pNode->mNumChildren; childIdx++ )
{
const aiNode* pChildNode = pNode->mChildren[ childIdx ];
WriteSubMeshesToJson(mScene, pChildNode, writer, myfile,level, root);
}
}
我需要json這樣的東西
{
"Parenting1" : {
"Parenting2" : {
"Parenting3" : {}
}
}
}
您的問題在這里:
void WriteSubMeshesToJson(..., std::ofstream &myfile, int &level)
----------------------------------------------------------^
因為您使用對level
變量的引用,所以在完成當前子項的打印后,增量在父調用中可見。 不會,打印子網格物體時函數中的level
值不應更改。
只需刪除&
即可使用按值傳遞參數。
您的Json::Value
存在相反的問題,應該通過引用傳遞它,以便子代可以將其插入到父json中。 你應該解決您的調用WriteSubMeshesToJson
通過當前節點,而不是總是傳遞root
節點。
順便說一下,您的代碼對於C ++並不是很習慣。 因此,這里有一個建議:在將字符串發送到文件之前,無需手動格式化字符串,也可以直接在std::ostream
上使用<<
操作符
std::string output;
level++;
output = "level" + std::to_string(level) + + pNode->mName.data+ "\n";
myfile << output;
成為:
output << "level" << level << pNode->mName.data << '\n';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.