簡體   English   中英

Ogre3d scenenode數組

[英]Ogre3d scenenode array

目前我正在ogre3d的pcg城市工作,基本上靠近標記為城市的房間將在那里產生一個城市。 然而,我對如何將建築物“存儲”成陣列並檢查其位置以處理碰撞感到不知所措。 在方法中,我得到了建築物需要產生的平面大小,之后我創建了一個_cityNode,它將容納所有建築節點。 這些在for循環中設置。 在建築變量中,我嘗試在數組中獲取buildingNode,以便我可以在另一種方法中檢查碰撞。 我基本上有兩個問題:

  1. 如何將buildingNode轉換為數組?
  2. 這種方法是“建築節點的唯一性是正確的還是我需要另一種方法?

     void CityManager::generateCity(int sizeX, int sizeZ, int _numberOfBuildings) { #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 FILE* fp; freopen_s(&fp, "CONOUT$", "w", stdout); _rootNode = GameManager::getSingletonPtr()->getSceneManager()->getRootSceneNode(); _cityNode = _rootNode->createChildSceneNode("cityNode"); printf(" number of buildings: %d \\n", _numberOfBuildings); printf(" location of X: %d location of Z: %d \\n", sizeX, sizeZ); for (int i = 0; i < _numberOfBuildings; i++) { Ogre::SceneNode* buildingNode = _cityNode->createChildSceneNode("buildingNode" + i); Ogre::Entity* _buildingEntity = GameManager::getSingletonPtr()->getSceneManager()->createEntity("cube.mesh"); buildingNode->createChildSceneNode()->attachObject(_buildingEntity); buildingNode->setPosition(rand() % sizeX , 50, rand() % sizeZ); buildingNode->setScale(rand() % 6+1 , rand() % 6 + 1, rand() % 6 + 1); Ogre::Vector3 buildingpos = buildingNode->getPosition(); Ogre::Vector3 buildingscale = buildingNode->getScale(); //_buildings = new Ogre::SceneNode[buildingNode]; checkCollision(); checkEntryWay(); printf("positions of building nodes %f, %f, %f " , buildingpos.x, buildingpos.y, buildingpos.z); printf("scale of building nodes %f, %f, %f \\n", buildingscale.x, buildingscale.y, buildingscale.z); } fclose(fp); #endif } 

您可以使用任何您想要的STL容器, Ogre::SceneNode*與它們完全兼容。

作為一個例子,你可以像std::vector一樣收集你的節點

std::vector<Ogre::SceneNode*> buildings_;
for (int i = 0; i < _numberOfBuildings; i++)
{
  /* ... */
  buildings_.push_back(buildingNode);
}

后來就像訪問它們一樣

for (auto i : buildings_) {
  Ogre::Vector3 buildingpos = i->getPosition();
  Ogre::Vector3 buildingscale = i->getScale();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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