|
小弟刚开始接触Ogre,才看了两天《Ogre 3D程序设计》额。。。看到第五章通过例子了解场景管理器的时候我也试着写了下代码,但是调试到sceneMgr -> setWorldGeometry(terrain_cfg);这句时出错,提示Ogre::InvalidParametersException。例子里的Terrain是可以运行的。这是怎么回事呢?
我的代码:
#include "stdafx.h"
#include "MyFrameListener.h"
#include <string>
using namespace Ogre;
RenderWindow * window;
Root *root;
Camera * cam;
void createResource()
{
ConfigFile cf;
cf.load("resources.cfg");
// Go through all sections & settings in the file
ConfigFile::SectionIterator seci = cf.getSectionIterator();
String secName, typeName, archName;
while (seci.hasMoreElements())
{
secName = seci.peekNextKey();
ConfigFile::SettingsMultiMap *settings = seci.getNext();
ConfigFile::SettingsMultiMap::iterator i;
for (i = settings->begin(); i != settings->end(); ++i)
{
typeName = i->first;
archName = i->second;
ResourceGroupManager::getSingleton().addResourceLocation(
archName, typeName, secName);
}
}
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
{
root=new Root();
createResource();
MyFrameListener *myListener=new MyFrameListener();
SceneManager *sceneMgr=root->createSceneManager(ST_EXTERIOR_CLOSE,"MainSceneManager");
if(root->showConfigDialog())
{
root->initialise(true, "test");
window =root->getAutoCreatedWindow ();
cam = sceneMgr ->createCamera("MainCamera");
cam->setNearClipDistance(5);
cam->setFarClipDistance(1000);
cam->setAspectRatio(Real(1.333333));
cam->lookAt(Vector3(0,0,0));
Viewport * vp = window->addViewport(cam);
root->addFrameListener(myListener);
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
ColourValue fadeColour(0.93, 0.86, 0.76);
sceneMgr->setFog( FOG_LINEAR, fadeColour,0.001, 500, 1000);
window->getViewport(0)->setBackgroundColour(fadeColour);
std::string terrain_cfg("terrain.cfg");
sceneMgr -> setWorldGeometry(terrain_cfg);
if (root->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE))
{
cam->setFarClipDistance(0);
}
Plane plane;
plane.d = 5000;
plane.normal = -Vector3::UNIT_Y;
sceneMgr->setSkyPlane(true, plane, "Examples/CloudySky");
cam->setPosition(707,2500,528);
cam->lookAt(0, 0, 0);
sceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
Light* l = sceneMgr->createLight("MainLight");
l->setPosition(20,80,50);
while(true)
{
WindowEventUtilities::messagePump();
gameMain();
if(!root->renderOneFrame())
break;
}
}
delete myListener;
delete root;
return 0;
} |
|