簡體   English   中英

深度優先搜索子網格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM