Game Design and Dev Ogre3D Overview CSE 786 Prof. Roger Crawfis
Ogre 3D Base web site: www.ogre3d.org Download and install Notes Wiki 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 …
What is Ogre3D? Object-Oriented Some Design Patterns used A little old school and the code is getting bloated. Not very well engineered now. Some Design Patterns used Singletons Managers Factory Methods
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.
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
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
Core Objects -The 'Root' object is the entry point to the OGRE system. This object MUST be the first one to be created, and the last one to be destroyed. -(ST_GENERIC, ST_INTERIOR , BSP_MANAGER)The intention is that specialisations will be created for each type of scene such that under the surface the subclass will optimise the scene organisation for best performance given assumptions which can be made for that scene type. An example is the BspSceneManager which optimises rendering for large indoor levels based on a Binary Space Partition (BSP) tree. -An entity is an instance of a movable object in the scene. -The Material object controls how objects in the scene are rendered. It specifies what basic surface properties objects have such as reflectance of colours, shininess etc, how many texture layers are present, what images are on them and how they are blended together, what special effects are applied such as environment mapping, what culling mode is used, how the textures are filtered etc. -Overlays allow you to render 2D and 3D elements on top of the normal scene contents to create effects like heads-up displays (HUDs), menu systems, status panels etc.
Startup Sequence ExampleApplication Go() Setup() Configure() setupResources() chooseSceneManager() createCamera() createViewport() createResourceListener() loadResources() createScene() frameStarted/Ended() createFrameListener() destroyScene()
Basic Scene Entity, SceneNode Camera, lights, shadows BSP map Integrated ODE physics Frame listeners Demo_BspCollision
Terrain, sky, fog Demo_Terrain Media\Terrain.cfg
CEGUI Window, panel, scrollbar, listbox, button, static text Media/gui/ogregui.layout CEGUI::Window* sheet = CEGUI::WindowManager::getSingleton().loadWindowLayout( (CEGUI::utf8*)"ogregui.layout"); mGUISystem->setGUISheet(sheet); Demo_Gui Can show Buffered input: OIS::KeyListener, OIS::MouseListener
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); -Softimage XSI, Milkshape 3D, Blender, 3D Studio or Maya exporters Shadow_deneme Demo_SkeletalAnimation => CEGUI_MeshViewer -Morph animation works by storing snapshots of the absolute vertex positions in each keyframe, and interpolating between them. -Pose animation is about blending multiple discrete poses, expressed as offsets to the base vertex data, with different weights to provide a final result.
Animation Crowd (instancing vs single entity) Facial animation InstancedGeometry* batch = new InstancedGeometry(mCamera->getSceneManager(), "robots" ); batch->addEntity(ent, Vector3::ZERO); batch->build(); Facial animation VertexPoseKeyFrame* manualKeyFrame; manualKeyFrame->addPoseReference(); manualKeyFrame->updatePoseReference ( ushort poseIndex, Real influence) Demo_Crowd Demo_FacialAnimation
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 } 3D desktop
Particle Effects mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject( mSceneMgr->createParticleSystem("sil", "Examples/sil")); 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 Demo_ParticleFX Media/particle/Example.particle
Particle Effects Particle system attributes quota 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
Fire and Smoke affector Rotator { rotation_range_start 0 rotation_range_end 360 rotation_speed_range_start -60 rotation_speed_range_end 200 } Demo_Smoke