void createLights(){ //creating a light light = mSceneMgr->createLight("Light1"); light->setType(Light::LT_POINT); light->setPosition(Vector3(0, 150, 250)); //setting it's diffuse and specular colour to red light->setDiffuseColour(1.0, 0.0, 0.0); light->setSpecularColour(1.0, 0.0, 0.0); //create a yellow light: light = mSceneMgr->createLight("Light3"); light->setType(Light::LT_DIRECTIONAL); light->setDiffuseColour(ColourValue(.25, .25, 0)); light->setSpecularColour(ColourValue(.25, .25, 0)); //yellow light direction light->setDirection(Vector3( 0, -1, 1 )); //blue spot light: light = mSceneMgr->createLight("Light2"); light->setType(Light::LT_SPOTLIGHT); light->setDiffuseColour(0, 0, 1.0); light->setSpecularColour(0, 0, 1.0); light->setDirection(-1, -1, 0); light->setPosition(Vector3(300, 300, 0)); light->setSpotlightRange(Degree(35), Degree(50)); }
MassTest::MassTest() : mLight(NULL), arc(0.0f) { using namespace Ogre; SceneManager* sceneMgr = Root::getSingleton().getSceneManager(BFG_SCENEMANAGER); mLight = sceneMgr->createLight("bla oder blub"); mLight->setType(Light::LT_DIRECTIONAL); mLight->setDirection(Vector3(1.0f, 1.0f, 1.0f)); mLight->setDiffuseColour(ColourValue::White); mLight->setSpecularColour(ColourValue::White); mLight->setPowerScale(5.0f); sceneMgr->setAmbientLight(ColourValue::Black); // x size_t j_max = 10; float j_dist = 10.0f; // y size_t k_max = 20; float k_dist = 5.0f; // z size_t i_max = 10; float i_dist = 20.0f; for (size_t k=0; k<k_max; ++k) { for (size_t j=0; j<j_max; ++j) { for (size_t i=0; i<i_max; ++i) { boost::shared_ptr<RenderObject> tmp; tmp.reset(new RenderObject ( NULL_HANDLE, generateHandle(), "Arrow.mesh", v3 ( j*j_dist - j_max/2*j_dist, k*k_dist - k_max/2*k_dist - k_dist/2, i_dist + i*i_dist ), qv4(0,1,0,0) )); mObjects.push_back(tmp); } } } }
void createScene() { Plane plane(Ogre::Vector3::UNIT_Y, -5); MeshManager::getSingleton().createPlane("plane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500, 1500, 200, 200, true, 1, 5, 5, Ogre::Vector3::UNIT_Z); _myOgre = _sceneManager->createEntity("Sinbad.mesh"); _myCube = _sceneManager->createEntity("Cube.mesh"); Entity *ground = _sceneManager->createEntity("LightPlaneEntity", "plane"); _sceneManager->getRootSceneNode()->attachObject(_myOgre); _sceneManager->getRootSceneNode()->attachObject(ground); SceneNode *cubeNode = _myOgre->getParentSceneNode()->createChildSceneNode(); cubeNode->attachObject(_myCube); cubeNode->scale(0.01, 0.01, 0.01); cubeNode->setPosition(2.0, 0.0, 0.0); //Notice that this is relative to the Ogre's model origin Light *plight = _sceneManager->createLight("Light2"); plight->setType(Light::LT_POINT); cubeNode->attachObject(plight); Ogre::Entity* myCustomCube = _sceneManager->createEntity("MyCube", "MyCube.mesh"); Ogre::SceneNode* myCustomCubeNode = _sceneManager->getRootSceneNode()->createChildSceneNode(); myCustomCubeNode->attachObject(myCustomCube); myCustomCubeNode->setPosition(16.0, 0, 0); myCustomCubeNode->setScale(5.0,5.0,5.0); // You may have to scale your object to see it well\\ // create light Light *light = _sceneManager->createLight("Light1"); light->setType(Light::LT_DIRECTIONAL); light->setDirection(Ogre::Vector3(1, -1, 0)); // some shadows would be nice _sceneManager->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); ground->setMaterialName("Examples/BeachStones"); _sceneManager->setAmbientLight(ColourValue(0.3f, 0.3f, 0.3f)); }
void setupScene() { mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "Default SceneManager"); Camera *cam = mSceneMgr->createCamera("Camera"); Viewport *vp = mRoot->getAutoCreatedWindow()->addViewport(cam); Entity *ent; mSceneMgr->setAmbientLight(ColourValue(0.25, 0.25, 0.25)); mSceneMgr->setShadowTechnique( SHADOWTYPE_STENCIL_ADDITIVE ); // EN:: make a cube to bounce around // BR:: cria um cubo pra quicar ManualObject *cmo = createCubeMesh("manual", ""); cmo->convertToMesh("cube"); ent = mSceneMgr->createEntity("Cube", "cube.mesh"); ent->setCastShadows(true); boxNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); boxNode->attachObject(ent); boxNode->setScale(Vector3(0.1,0.1,0.1)); // EN:: make a rock wall on the floor // BR:: adiciona piso de pedra no chão Plane plane(Vector3::UNIT_Y, 0); MeshManager::getSingleton().createPlane("ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z); ent = mSceneMgr->createEntity("GroundEntity", "ground"); mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent); ent->setMaterialName("Examples/Rockwall"); ent->setCastShadows(false); // EN:: make a light to see stuff with // BR:: adiciona uma iluminação Light *light = mSceneMgr->createLight("Light1"); light->setType(Light::LT_POINT); light->setPosition(Vector3(250, 150, 250)); light->setDiffuseColour(ColourValue::White); light->setSpecularColour(ColourValue::White); // EN:: Create the scene node // BR:: cria o SceneNode (nó da cena) SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode1", Vector3(-200, 100, 200)); node->yaw(Degree(-45)); node->attachObject(cam); }
int main() { Root *root = new Root(StringUtil::BLANK, StringUtil::BLANK); GLPlugin *glPlugin = new GLPlugin(); root->installPlugin(glPlugin); RenderSystem *renderSystem = root->getAvailableRenderers().at(0); renderSystem->setConfigOption("Fixed Pipeline Enabled", "No"); root->setRenderSystem(renderSystem); root->initialise(false); RenderWindow *window = root->createRenderWindow("Hello, OGRE", 800, 600, false); SceneManager *sceneManager = root->createSceneManager(ST_GENERIC); ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); RTShader::ShaderGenerator::initialize(); RTShader::ShaderGenerator::getSingleton().addSceneManager(sceneManager); createSphereMesh("SphereMesh", 10.f, 16, 16); ResourceGroupManager::getSingleton().addResourceLocation("shader", "FileSystem"); createSphereMaterial("SphereMaterial", 1.f, 0.f, 0.f); Camera *camera = sceneManager->createCamera("Camera"); camera->setPosition(0.f, 0.f, 80.f); camera->lookAt(0.f, 0.f, 0.f); camera->setNearClipDistance(5.f); Viewport *viewport = window->addViewport(camera); viewport->setBackgroundColour(ColourValue(0.f, 0.f, 0.f)); viewport->setMaterialScheme(RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME); camera->setAspectRatio((Real)(viewport->getActualWidth()) / (Real)(viewport->getActualHeight())); sceneManager->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); Light *light = sceneManager->createLight("Light"); light->setPosition(50.f, 50.f, 50.f); Entity *sphereEntity = sceneManager->createEntity("SphereEntity", "SphereMesh"); sphereEntity->setMaterialName("SphereMaterial"); SceneNode *sphereNode = sceneManager->getRootSceneNode()->createChildSceneNode(); sphereNode->attachObject(sphereEntity); HelloOgreFrameListener *frameListener = new HelloOgreFrameListener(window); root->addFrameListener(frameListener); root->startRendering(); delete frameListener; delete root; delete glPlugin; return 0; }
// ------------------------- Scene description ------------------------- // SceneManager* createOgreScene() { SceneManager* scene = mRoot->createSceneManager(ST_GENERIC); // Initialize camera Camera* camera = scene->createCamera("MainCamera"); camera->setPosition(Vector3(0, 10, 30)); camera->lookAt(Vector3(0, 0, 0)); camera->setNearClipDistance(0.5); camera->setFOVy(Ogre::Degree(60.0)); camera->setAspectRatio((float) mWindow->getWidth() / mWindow->getHeight()); // Set up lighting (~ glEnable(GL_LIGHTING), glEnable(GL_LIGHT0), glLightfv(...)): scene->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); Light* light = scene->createLight("MainLight"); light->setType(Light::LT_POINT); light->setDiffuseColour(1, 1, 1); light->setSpecularColour(1, 1, 1); light->setPosition(20.0f, 80.0f, 50.0f); // Enable shadow computations scene->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); // Scenery Ogre::Entity* plane = scene->createEntity("Plane", Ogre::SceneManager::PT_PLANE); Ogre::SceneNode* planeNode = scene->getRootSceneNode()->createChildSceneNode("PlaneNode"); planeNode->attachObject(plane); planeNode->rotate(Ogre::Vector3(-1, 0, 0), Ogre::Degree(90)); plane->setCastShadows(false); plane->setMaterialName("Floor/Marble"); // Load character mesh mBodyNode = scene->getRootSceneNode()->createChildSceneNode(Vector3::UNIT_Y * 5); mBodyEnt = scene->createEntity("SinbadBody", "Sinbad.mesh"); mBodyNode->attachObject(mBodyEnt); // Load animations // Exercise 5: Get pointer to animation state // ... return scene; }
void createScene() { Plane plane(Ogre::Vector3::UNIT_Y, -5); MeshManager::getSingleton().createPlane("plane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500, 1500, 200, 200, true, 1, 5, 5, Ogre::Vector3::UNIT_Z); Entity *ent = _sceneManager->createEntity("Sinbad.mesh"); Entity *ground = _sceneManager->createEntity("LightPlaneEntity", "plane"); _sceneManager->getRootSceneNode()->attachObject(ent); _sceneManager->getRootSceneNode()->attachObject(ground); // create light Light* light = _sceneManager->createLight("Light1"); light->setType(Light::LT_DIRECTIONAL); light->setDirection(Ogre::Vector3(1, -1, 0)); // some shadows would be nice _sceneManager->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); ground->setMaterialName("Examples/BeachStones"); _sceneManager->setAmbientLight(ColourValue(0.3f, 0.3f, 0.3f)); }
//这个函数会在初始化调用 void FCScene::doEnable(void) { _map->active(); using namespace Ogre; //从系统中得到Ogre的场景管理器 SceneManager * sm = OgreGraphicsManager::getSingleton().getSceneManager(); //把其场景清空 sm->clearScene(); Plane plane; plane.normal = Vector3::UNIT_Y; plane.d = 100; FCKnowledge::getSingleton().mapInfo().setGround(-plane.d); FCKnowledge::getSingleton().mapInfo().enable(); MeshManager::getSingleton().createPlane("Myplane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 512, 512,20,20,true,1,60,60,Vector3::UNIT_Z); Ogre::Entity* pPlaneEnt = sm->createEntity( "plane", "Myplane" ); pPlaneEnt->setMaterialName("Examples/Rockwall"); pPlaneEnt->setQueryFlags(0); sm->getRootSceneNode()->createChildSceneNode()->attachObject(pPlaneEnt); //设置环境光 sm->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); //创建天空盒 //sm->setSkyBox(true, "Examples/SpaceSkyBox", 50 ); // 创建一个光源 Light* l = sm->createLight("MainLight"); //设置光源位置 l->setPosition(20,80,50); //下面代码随机 放置砖块 NameValueList par; for(int i = 1; i< 16 *16; ++i) { if(rand()%2 == 0) { par["pos"] = i; ActorPtr wall = Orz::GameFactories::getInstance().createActor("FCWall",IDManager::BLANK, &par ); getWorld()->comeIn(wall); _walls.push_back(wall); } } //在这里我们通过XML文件FighteingClub.xml 得到两个格斗者的名字,然后创建他们 并给他们位置和ID XMLFighterLoader loader; if(loader.load("FighteingClub.xml")) { { par["pos"] = 10; par["id"] = 0; ActorPtr fighter = Orz::GameFactories::getInstance().createActor(loader.getFighter1(),IDManager::BLANK, &par ); getWorld()->comeIn(fighter); _enemies.push_back(fighter); } { par["pos"] = 20; par["id"] = 1; ActorPtr fighter = Orz::GameFactories::getInstance().createActor(loader.getFighter2(),IDManager::BLANK, &par ); getWorld()->comeIn(fighter); _enemies.push_back(fighter); } } else//如果XML读取失败 那么就采用默认的 "FCFighter" { for(int i =0; i<2; ++i) { par["id"] = i; par["pos"] = i*10; ActorPtr fighter = Orz::GameFactories::getInstance().createActor("FCFighter",IDManager::BLANK, &par ); getWorld()->comeIn(fighter); _enemies.push_back(fighter); } } }
bool WorldLoader::CreateTestWorld(Game *pGame) { SceneManager * pSceneMgr = pGame->getRenderer()->getSceneManager(); // PC: Note, ogre likes the shadow setup to happen first, because it affects the model loading?? weird.. check the manual // setup the shadow technique to use.. stencil does nice self-shadowing but its a bit slow. pSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE); //mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); //pSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE); //mSceneMgr->setShadowTextureSelfShadow(true); //pSceneMgr->setShadowTextureSize(1024); //mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_ADDITIVE); /* LiSPSMShadowCameraSetup* lispsm = new LiSPSMShadowCameraSetup(); lispsm->setOptimalAdjustFactor(0.3); mSceneMgr->setShadowCameraSetup(ShadowCameraSetupPtr(lispsm)); mSceneMgr->setShadowColour(ColourValue(0.5, 0.5, 0.5)); */ srand(1027); #ifdef _DEBUG for(int i = 0; i < 20; i++) #else for(int i = 0; i < 2000; i++) #endif { CreateRandomRobot(pGame); } for(int i = 0; i < 4; i++) { //CreateRandomBox(pGame); } //CreateArena(pGame); //CreateCameraBox(pGame); /* for(int i = 0; i < 40; i++) { CreateRandomHouse(pGame); } for(int i = 0; i < 40; i++) { CreateRandomBarrel(pGame); } */ #ifndef _TERRAIN_ Plane plane(Vector3::UNIT_Y,0); MeshManager::getSingleton().createPlane("ground",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,150000,150000,20,20,true,1,500,500,Vector3::UNIT_Z); Entity *ent = pSceneMgr->createEntity("GroundEntity", "ground"); SceneNode* planeNode = pSceneMgr->getRootSceneNode()->createChildSceneNode(); planeNode->attachObject(ent); //ent->setMaterialName("Examples/GrassFloor"); ent->setMaterialName("PAC/Floor"); //ent->setMaterialName("PAC/Floor"); ent->setCastShadows(false); #else pSceneMgr->setWorldGeometry("terrain.cfg"); #endif Viewport * pView = pGame->getRenderer()->getRenderWindow()->getViewport(0); pView->setBackgroundColour(ColourValue(0.3f,0.3f,0.3f,1.0f)); //pSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8); //pSceneMgr->setSkyBox(true,"Examples/CloudyNoonSkyBox",50); // Set ambient light pSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); // Create a light Light* l = pSceneMgr->createLight("MainLight"); l->setType(Light::LightTypes::LT_DIRECTIONAL); Vector3 lightpos(20,140,50); Vector3 lightspot(0,0,0); Vector3 lightdir = lightspot - lightpos; l->setDirection(lightdir); l->setPosition(lightpos); return true; };
INT WINAPI EmbeddedMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) { try { // Create a new window // Style & size DWORD dwStyle = WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW; // Register the window class WNDCLASS wc = { 0, TestWndProc, 0, 0, hInst, LoadIcon(0, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH), 0, "TestWnd" }; RegisterClass(&wc); HWND hwnd = CreateWindow("TestWnd", "Test embedding", dwStyle, 0, 0, 800, 600, 0, 0, hInst, 0); Root root("", ""); root.loadPlugin("RenderSystem_GL"); //root.loadPlugin("RenderSystem_Direct3D9"); root.loadPlugin("Plugin_ParticleFX"); root.loadPlugin("Plugin_CgProgramManager"); // select first renderer & init with no window root.setRenderSystem(*(root.getAvailableRenderers().begin())); root.initialise(false); // create first window manually NameValuePairList options; options["externalWindowHandle"] = StringConverter::toString((size_t)hwnd); renderWindow = root.createRenderWindow("embedded", 800, 600, false, &options); setupResources(); ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); SceneManager *scene = root.createSceneManager(Ogre::ST_GENERIC, "default"); Camera *cam = scene->createCamera("cam"); Viewport* vp = renderWindow->addViewport(cam); vp->setBackgroundColour(Ogre::ColourValue(0.5, 0.5, 0.7)); cam->setAutoAspectRatio(true); cam->setPosition(0,0,300); cam->setDirection(0,0,-1); Entity* e = scene->createEntity("1", "ogrehead.mesh"); scene->getRootSceneNode()->createChildSceneNode()->attachObject(e); Light* l = scene->createLight("l"); l->setPosition(300, 100, -100); // message loop MSG msg; while(GetMessage(&msg, NULL, 0, 0 ) != 0) { TranslateMessage(&msg); DispatchMessage(&msg); } } catch( Exception& e ) { MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL); } return 0; }
//这个函数会在初始化调用 void FCScene::doEnable(void) { using namespace Ogre; // using namespace OgreNewt; //从系统中得到Ogre的场景管理器 SceneManager * sm = OgreGraphicsManager::getSingleton().getSceneManager(); //把其场景清空 sm->clearScene(); //sm->setWorldGeometry("terrain.cfg"); Plane plane; plane.normal = Vector3::UNIT_Y; plane.d = 100; FCKnowledge::getSingleton().mapInfo().setGround(-plane.d); FCKnowledge::getSingleton().mapInfo().enable(); FCKnowledge::getSingleton().setSceneName(this->getName()); //MeshManager::getSingleton().createPlane("Myplane", // ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, // 1500,1500,20,20,true,1,60,60,Vector3::UNIT_Z); //Ogre::Entity* pPlaneEnt = sm->createEntity( "plane", "Myplane" ); //pPlaneEnt->setMaterialName("Examples/Rockwall"); //sm->getRootSceneNode()->createChildSceneNode()->attachObject(pPlaneEnt); //set ambient light sm->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); //create sky box sm->setSkyBox(true, "Examples/SpaceSkyBox2"); // create a light source Light* l = sm->createLight("MainLight"); //set light position l->setPosition(20,80,50); //create player NameValueList par; par["initPos"] = Ogre::Vector3(200, 50, 270); par["queryFlag"] = 0x2; par["speedLimit"] = 50.0; _player = Orz::GameFactories::getInstance().createActor("PlayerPlane", "player", &par); getWorld()->comeIn(_player); //create player controller NameValueList playerCtrlPar; playerCtrlPar["playerName"] = std::string("player"); _playerCtrl = GameFactories::getInstance().createActor("PlayerController", "playerCtrl", &playerCtrlPar); getWorld()->comeIn(_playerCtrl); //create enemies for(int i = 0; i < _numEnemies; i++) { par["initPos"] = Ogre::Vector3(Ogre::Math::RangeRandom(0, 1000), Ogre::Math::RangeRandom(0, 200), Ogre::Math::RangeRandom(0, 1000)); par["queryFlag"] = 0x8; par["speedLimit"] = 10.0; ActorPtr enemy = GameFactories::getInstance().createActor("EnemyPlane", "enemy"+boost::lexical_cast<std::string>(i), &par); getWorld()->comeIn(enemy); _enemies.push_back(enemy); NameValueList ctrlPar; ctrlPar["fighterName"] = "enemy"+boost::lexical_cast<std::string>(i); ActorPtr enemyCtrl = GameFactories::getInstance().createActor("EnemyController", "enemyCtrl"+boost::lexical_cast<std::string>(i), &ctrlPar); getWorld()->comeIn(enemyCtrl); _enemiesCtrl.push_back(enemyCtrl); } NameValueList obstaclePar; obstaclePar["pos"] = Ogre::Vector3(1000, 400, 800); obstaclePar["scale"] = 1.7; obstaclePar["materialName"] = std::string("Planets/Down"); _obstacle1 = GameFactories::getInstance().createActor("Obstacle", "obstacle1", &obstaclePar); getWorld()->comeIn(_obstacle1); obstaclePar["pos"] = Ogre::Vector3(-1000, -100, 400); obstaclePar["scale"] = 1.2; obstaclePar["materialName"] = std::string("Planets/Dust"); _obstacle2 = GameFactories::getInstance().createActor("Obstacle", "obstacle2", &obstaclePar); getWorld()->comeIn(_obstacle2); obstaclePar["pos"] = Ogre::Vector3(500, -400, -1000); obstaclePar["scale"] = 0.8; obstaclePar["materialName"] = std::string("Planets/Reststop"); _obstacle3 = GameFactories::getInstance().createActor("Obstacle", "obstacle3", &obstaclePar); getWorld()->comeIn(_obstacle3); Ogre::OverlayManager::getSingleton().getByName("Target")->show(); enableUpdate(); }