102 lines
2.7 KiB
C++
102 lines
2.7 KiB
C++
// This file is part of the OGRE project.
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
// of this distribution and at https://www.ogre3d.org/licensing.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#include "Ogre.h"
|
|
#include "OgreApplicationContext.h"
|
|
|
|
class App
|
|
: public OgreBites::ApplicationContext
|
|
{
|
|
public:
|
|
App();
|
|
virtual ~App();
|
|
|
|
void setup();
|
|
void locateResources();
|
|
};
|
|
|
|
App::App()
|
|
: OgreBites::ApplicationContext("App")
|
|
{
|
|
}
|
|
void App::setup()
|
|
{
|
|
OgreBites::ApplicationContext::setup();
|
|
}
|
|
void App::locateResources()
|
|
{
|
|
OgreBites::ApplicationContext::locateResources();
|
|
}
|
|
App::~App()
|
|
{
|
|
}
|
|
//! [key_handler]
|
|
class KeyHandler : public OgreBites::InputListener
|
|
{
|
|
bool keyPressed(const OgreBites::KeyboardEvent& evt) override
|
|
{
|
|
if (evt.keysym.sym == OgreBites::SDLK_ESCAPE)
|
|
{
|
|
Ogre::Root::getSingleton().queueEndRendering();
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
//! [key_handler]
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
//! [constructor]
|
|
OgreBites::ApplicationContext ctx("OgreTutorialApp");
|
|
ctx.initApp();
|
|
//! [constructor]
|
|
|
|
//! [setup]
|
|
// get a pointer to the already created root
|
|
Ogre::Root* root = ctx.getRoot();
|
|
Ogre::SceneManager* scnMgr = root->createSceneManager();
|
|
|
|
// register our scene with the RTSS
|
|
Ogre::RTShader::ShaderGenerator* shadergen = Ogre::RTShader::ShaderGenerator::getSingletonPtr();
|
|
shadergen->addSceneManager(scnMgr);
|
|
|
|
// without light we would just get a black screen
|
|
Ogre::Light* light = scnMgr->createLight("MainLight");
|
|
Ogre::SceneNode* lightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
|
|
lightNode->setPosition(0, 10, 15);
|
|
lightNode->attachObject(light);
|
|
|
|
// also need to tell where we are
|
|
Ogre::SceneNode* camNode = scnMgr->getRootSceneNode()->createChildSceneNode();
|
|
camNode->setPosition(0, 0, 15);
|
|
camNode->lookAt(Ogre::Vector3(0, 0, -1), Ogre::Node::TS_PARENT);
|
|
|
|
// create the camera
|
|
Ogre::Camera* cam = scnMgr->createCamera("myCam");
|
|
cam->setNearClipDistance(5); // specific to this sample
|
|
cam->setAutoAspectRatio(true);
|
|
camNode->attachObject(cam);
|
|
|
|
// and tell it to render into the main window
|
|
ctx.getRenderWindow()->addViewport(cam);
|
|
|
|
// finally something to render
|
|
// Ogre::Entity* ent = scnMgr->createEntity("Sinbad.mesh");
|
|
Ogre::Entity* ent = scnMgr->createEntity("normal-male.glb");
|
|
Ogre::SceneNode* node = scnMgr->getRootSceneNode()->createChildSceneNode();
|
|
node->attachObject(ent);
|
|
//! [setup]
|
|
|
|
//! [main]
|
|
// register for input events
|
|
KeyHandler keyHandler;
|
|
ctx.addInputListener(&keyHandler);
|
|
|
|
ctx.getRoot()->startRendering();
|
|
ctx.closeApp();
|
|
//! [main]
|
|
return 0;
|
|
}
|