useful tools for making video games

Post on 30-Jan-2016

58 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Useful Tools for Making Video Games. Part I An overview of Ogre. Sample Games. Thunder Wheels Kong Masterplan Pacific Storm Trampoline. Features. Graphics API independent 3D implementation Platform independence Material & Shader support - PowerPoint PPT Presentation

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