Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

18
Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis

Transcript of Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Page 1: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Game Design and DevOgre3D Overview

CSE 786Prof. Roger Crawfis

Page 2: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Ogre 3D

Base web site: www.ogre3d.org Download and install Notes

The SDK just seems to unpack the files where they were, so move to you development area (Programming/SDKs?)

The Environment variable (OGRE_HOME) was not set. Use this in you Project settings.

Includes Boost and OIS. Does not include CEGUI. OIS name conflicts with Ogre (Vector3), so never have a:

using namespace OIS; Wiki

Tutorials API documentation …

Page 3: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

What is Ogre3D?

Object-OrientedA little old school and the code is getting

bloated.Not very well engineered now.

Some Design Patterns usedSingletonsManagersFactory Methods

Page 4: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

What is Ogre3D?

Plug-In Architecture Rendering System Core Features Enhancements

Dynamically loads dll’s at runtime. Copy the ones you need over to your repository. Default framework reads in a config file to

determine which plug-ins to load. Not automatic.

Page 5: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Plug-In Framework

Default Plugins.cfg# Defines plugins to load

# Define plugin folder

PluginFolder=.

# Define plugins

Plugin=RenderSystem_Direct3D9_d

Plugin=RenderSystem_GL_d

Plugin=Plugin_ParticleFX_d

Plugin=Plugin_BSPSceneManager_d

Plugin=Plugin_CgProgramManager_d

Plugin=Plugin_PCZSceneManager_d.dll

Plugin=Plugin_OctreeZone_d.dll

Plugin=Plugin_OctreeSceneManager_d

Page 6: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Media Resources

Default Resources.cfg file:# Resource locations to be added to the 'boostrap' path

# This also contains the minimum you need to use the Ogre example framework

[Bootstrap]

Zip=../../media/packs/OgreCore.zip

# Resource locations to be added to the default path

[General]

FileSystem=../../media

FileSystem=../../media/fonts

FileSystem=../../media/materials/programs

FileSystem=../../media/materials/scripts

FileSystem=../../media/materials/textures

FileSystem=../../media/models

FileSystem=../../media/overlays

FileSystem=../../media/particle

FileSystem=../../media/gui

FileSystem=../../media/DeferredShadingMedia

FileSystem=../../media/PCZAppMedia

Zip=../../media/packs/cubemap.zip

Zip=../../media/packs/cubemapsJS.zip

Zip=../../media/packs/dragon.zip

Zip=../../media/packs/fresneldemo.zip

Zip=../../media/packs/ogretestmap.zip

Zip=../../media/packs/skybox.zip

Page 7: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.
Page 8: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Core Objects

Page 9: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Startup Sequence

ExampleApplication Go() Setup() Configure() setupResources() chooseSceneManager() createCamera() createViewport() createResourceListener() loadResources() createScene() frameStarted/Ended() createFrameListener() destroyScene()

Page 10: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Basic Scene

Entity, SceneNodeCamera, lights, shadowsBSP mapIntegrated ODE physicsBSP mapFrame listeners

Page 11: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Terrain, sky, fog

Page 12: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

CEGUI

Window, panel, scrollbar, listbox, button, static text

Media/gui/ogregui.layoutCEGUI::Window* sheet =

CEGUI::WindowManager::getSingleton().loadWindowLayout( (CEGUI::utf8*)"ogregui.layout");

mGUISystem->setGUISheet(sheet);

Page 13: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Animation

Node animation (camera, light sources)Skeletal Animation

AnimationState *mAnimationState; mAnimationState = ent-

>getAnimationState("Idle");mAnimationState->setLoop(true);mAnimationState->setEnabled(true); mAnimationState-

>addTime(evt.timeSinceLastFrame); mNode->rotate(quat);

Page 14: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Animation

Crowd (instancing vs single entity)InstancedGeometry* batch = new InstancedGeometry(mCamera->getSceneManager(),

"robots" );batch->addEntity(ent, Vector3::ZERO);batch->build();

Facial animationVertexPoseKeyFrame* manualKeyFrame;manualKeyFrame->addPoseReference();manualKeyFrame->updatePoseReference ( ushort

 poseIndex, Real influence) 

Page 15: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Picking

CEGUI::Point mousePos = CEGUI::MouseCursor::getSingleton().getPosition(); Ray mouseRay = mCamera->getCameraToViewportRay(mousePos.d_x/float(arg.state.width), mousePos.d_y/float(arg.state.height)); mRaySceneQuery->setRay(mouseRay); mRaySceneQuery->setSortByDistance(false); RaySceneQueryResult &result = mRaySceneQuery->execute(); RaySceneQueryResult::iterator mouseRayItr; Vector3 nodePos; for (mouseRayItr = result.begin(); mouseRayItr != result.end(); mouseRayItr++) { if (mouseRayItr->worldFragment) { nodePos = mouseRayItr->worldFragment->singleIntersection; break; } // if }

Page 16: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Particle Effects

Examples/sil{ material Examples/Flare2 particle_width 75 particle_height 100 cull_each false quota 1000 billboard_type oriented_self // Area emitter emitter Point { angle 30 emission_rate 75 time_to_live 2 direction 0 1 0 velocity_min 250 velocity_max 300 colour_range_start 0 0 0 colour_range_end 1 1 1 } // Gravity affector LinearForce { force_vector 0 -100 0 force_application add } // Fader affector ColourFader { red -0.5 green -0.5 blue -0.5 }}

mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject( mSceneMgr->createParticleSystem("sil", "Examples/sil"));

Page 17: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Particle EffectsParticle system attributesquota material particle_width particle_height cull_each billboard_type billboard_origin billboard_rotation_type common_direction common_up_vector renderer sorted local_space point_rendering accurate_facing iteration_interval

nonvisible_update_timeout

Emitter attributes(point, box, clyinder, ellipsoid, hollow ellipsoid, ring)angle colour colour_range_start colour_range_end direction emission_rate position velocity velocity_min velocity_max time_to_live time_to_live_min time_to_live_max duration duration_min duration_max repeat_delay repeat_delay_min repeat_delay_max

Affectors (LinearForce, ColorFader)Linear Force Affector ColourFader Affector ColourFader2 Affector Scaler Affector Rotator Affector ColourInterpolator Affector ColourImage Affector DeflectorPlane Affector DirectionRandomiser Affector

Page 18: Ogre3D Overview Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis.

Fire and Smoke

affector Rotator

{

rotation_range_start 0

rotation_range_end 360

rotation_speed_range_start -60

rotation_speed_range_end 200

}