topical media & game development
lib-game-delta3d-sdk-examples-testNestedView-testNestedView.cpp / cpp
// TestNestedView.cpp : defines the implementation of the application
include <testNestedView.h>
include <dtCore/object.h>
include <dtCore/globals.h>
include <dtCore/camera.h>
include <dtCore/scene.h>
include <dtCore/deltawin.h>
include <osgViewer/CompositeViewer>
include <iostream>
using namespace dtCore;
using namespace dtABC;
// Default window sizing properties
const int DEFAULT_WIN_X = 60;
const int DEFAULT_WIN_Y = 30;
const int DEFAULT_VIEW_WIDTH = 640;
const int DEFAULT_VIEW_HEIGHT = 480;
const float DEFAULT_ASPECT_RATIO = DEFAULT_VIEW_WIDTH / (float)DEFAULT_VIEW_HEIGHT;
TestNestedView::TestNestedView(const std::string& configFilename)
: Application(configFilename)
{
}
TestNestedView::~TestNestedView()
{
}
void TestNestedView::Config()
{
//call the parent Config()
dtABC::Application::Config();
//change the title of the pre-built Window
//(this already has a Camera and Scene assignApped to it)
GetWindow()->SetWindowTitle("testNestedView");
GetWindow()->SetPosition(DEFAULT_WIN_X, DEFAULT_WIN_Y,
DEFAULT_VIEW_WIDTH + DEFAULT_VIEW_WIDTH / 2,
DEFAULT_VIEW_HEIGHT + DEFAULT_VIEW_HEIGHT / 2);
//set the first Camera position
GetCamera()->SetAspectRatio(DEFAULT_ASPECT_RATIO);
GetCamera()->GetOSGCamera()->setViewport(new osg::Viewport((float) DEFAULT_VIEW_WIDTH / 4.0f, 0.0f,
(float)DEFAULT_VIEW_WIDTH, (float)DEFAULT_VIEW_HEIGHT));
GetCamera()->SetClearColor(1.0f, 0.0f, 0.0f, 1.0f);
//Default view frame bin
mRedView = GetView();
mRedView->SetRenderOrder(0);
//Create second view, using the Application's Scene
mGreenView = new View("View 2");
//use the default, pre-built Scene
mGreenView->SetScene(GetScene());
this->AddView(*mGreenView);
//create second Camera, added to second View
mCam2 = new Camera("Camera 2");
mCam2->SetWindow(GetWindow());
mCam2->SetClearColor(0.f, 1.0f, 0.f, 1.f);
mCam2->SetAspectRatio(DEFAULT_ASPECT_RATIO);
mCam2->GetOSGCamera()->setViewport(new osg::Viewport((float) DEFAULT_VIEW_WIDTH / 2.0f, (float) DEFAULT_VIEW_HEIGHT / 4.0f,
(float)DEFAULT_VIEW_WIDTH, (float)DEFAULT_VIEW_HEIGHT));
mGreenView->SetCamera(mCam2.get());
//2nd view frame bin
mGreenView->SetRenderOrder(1);
//Create a third View, using the Application's Scene
mBlueView = new View("View 3");
//use the default, pre-built Scene
mBlueView->SetScene(GetScene());
this->AddView(*mBlueView);
//create a third Camera, added to third View, sharing the second Window
mCam3 = new Camera("Camera 3");
mBlueView->SetCamera(mCam3.get());
mCam3->SetWindow(GetWindow());
mCam3->GetOSGCamera()->setViewport(new osg::Viewport(0.0, (float) DEFAULT_VIEW_HEIGHT / 2.0f,
(float) DEFAULT_VIEW_WIDTH, (float) DEFAULT_VIEW_HEIGHT));
mCam3->SetClearColor(0.f, 0.f, 1.0f, 1.f);
mCam3->SetAspectRatio(DEFAULT_ASPECT_RATIO);
//3rd view frame bin
mBlueView->SetRenderOrder(2);
}
bool TestNestedView::KeyPressed(const dtCore::Keyboard* keyboard, int key)
{
// pass the keyboard event to the overlords
bool handled = Application::KeyPressed(keyboard, key);
if (handled) == true
{
return handled;
}
if (mRedView->GetRenderOrder() == 0)
{
mRedView->SetRenderOrder(1);
mGreenView->SetRenderOrder(2);
mBlueView->SetRenderOrder(0);
std::cout << "\nBlue on bottom, Red next, Green on top.\n";
}
else if (mRedView->GetRenderOrder() == 1)
{
mRedView->SetRenderOrder(2);
mGreenView->SetRenderOrder(0);
mBlueView->SetRenderOrder(1);
std::cout << "\nGreen on bottom, Blue next, Red on top.\n";
}
else
{
mRedView->SetRenderOrder(0);
mGreenView->SetRenderOrder(1);
mBlueView->SetRenderOrder(2);
std::cout << "\nRed on bottom, Green next, Blue on top.\n";
}
return true;
}
int main(int argc, char **argv)
{
//set data search path to parent directory and delta3d/data
dtCore::SetDataFilePathList(dtCore::GetDeltaRootPath() + "/examples/data" + ";");
//Instantiate the application and look for the config file
RefPtr<TestNestedView> app = new TestNestedView("config.xml");
//configuring the application
app->Config();
std::cout << "\nPush any key to cycle which view is 'on top.'\n\n";
std::cout << "Push Escape to exit app.\n";
// running the simulation loop
app->Run();
return 0;
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.