useful tools for making video games part i an overview of ogre
Post on 13-Dec-2015
222 Views
Preview:
TRANSCRIPT
Useful Tools for Making Video Games
Part IAn overview of Ogre
Sample Games
Thunder Wheels Kong Masterplan Pacific Storm Trampoline
Features
Graphics API independent 3D implementation Platform independence Material & Shader support
Well known texture formats: png, jpeg, tga, bmp, dds, dxt Mesh support: Milkshape3D, 3D Studio Max, Maya,
Blender Scene features
BSP, Octree plugins, hierarchical scene graph Special effects
Particle systems, skyboxes, billboarding, HUD, cube mapping, bump mapping, post-processing effects
Easy integration with physics libraries ODE, Tokamak, Newton, OPCODE
Open source!
Core Objects
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 BSP map Frame listeners
Terrain, sky, fog
CEGUI Window, panel, scrollbar,
listbox, button, static text Media/gui/ogregui.layoutCEGUI::Window* sheet = CEGUI::WindowManager::getSingleton().load
WindowLayout( (CEGUI::utf8*)"ogregui.layout");
mGUISystem->setGUISheet(sheet);
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);
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)
Picking
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 }
Particle EffectsmSceneMgr->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 }}
Particle Effects
Particle 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
Fire and Smoke
affector Rotator { rotation_range_start 0 rotation_range_end 360 rotation_speed_range_start -60 rotation_speed_range_end
200 }
Cel Shading
vertex_program Ogre/CelShadingVP cg{
source Example_CelShading.cgentry_point main_vp…
default_params{… }
}
material Examples/CelShading{…
vertex_program_ref Ogre/CelShadingVP {}fragment_program_ref Ogre/CelShadingFP {}
}
Cube Mapping
With Perlin noise to distort vertices
void morningcubemap_fp (float3 uv : TEXCOORD0,out float4 colour : COLOR,uniform samplerCUBE tex : register(s0) )
{colour = texCUBE(tex, uv);// blow out the light a bitcolour *= 1.7;
}
Bump Mapping
+ =
Reflections & Refractions// Noisetexture_unit{
// Perlin noise volumetexture waves2.dds// min / mag filtering, no mipfiltering linear linear none
}// Reflectiontexture_unit{ // Will be filled in at runtime
texture Reflectiontex_address_mode clamp// needed by ps.1.4tex_coord_set 1
}// Refractiontexture_unit{
// Will be filled in at runtimetexture Refractiontex_address_mode clamp// needed by ps.1.4tex_coord_set 2
}
Reflections & Refractions
Grass
Each grass section is 3 planes at 60 degrees to each otherNormals point straight up to simulate correct lighting
Post-Processing Effects
Supporting tools (add-ons)
Blender, Autodesk 3DS, Milkshape3D, Softimage XSI importers/exporters
Particle editors, mesh viewers GUI editors Physics bindings Scene exporters and lots moreAdd-on site
References
http://www.ogre3d.org/
top related