1 / 59

SE Team 9 3D Flyer

SE Team 9 3D Flyer. Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach Matt Cook. Project Statement. GlobalFlyer allows a player to fly a Wright brothers-style airplane in 3D space using the OGRE graphic rendering engine and the FMOD sound system. Presentation Outline. Introduction

jansanders
Download Presentation

SE Team 9 3D Flyer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SE Team 93D Flyer Cole HoosierRyan HannebaumLeanne GrayAlex StampbachMatt Cook

  2. Project Statement • GlobalFlyer allows a player to fly a Wright brothers-style airplane in 3D space using the OGRE graphic rendering engine and the FMOD sound system.

  3. Presentation Outline • Introduction • Review of web page • Project Accomplishments • Design (UML Diagrams) • Source Code • Lighting • Sky, Fog, and Terrain • Physics • Mouse Controller • User Manual • Testing • Project Demonstration • Conclusion

  4. GlobalFlyer Web Site • http://seteam9.cis.ksu.edu/

  5. Project Accomplishments

  6. Time and Lines of Code

  7. Effort Over the Semester Time in minutes =Presentation during this time period

  8. Task Effort vs. Estimated Time

  9. Design

  10. FrameStarted Sequence Diag

  11. Source Code Explained

  12. Lighting & Shadows

  13. Lighting & Shadows

  14. Sky, Fog and Terrain

  15. Sky • setSkyPlane(bool enable, const Plane& plane, const String& materialName, Real scale, Real tiling , bool drawFirst , Real bow, int xsegments , int ysegments); • mSceneMgr->setSkyPlane( true, plane, "Examples/CloudySky", 500, 20, true, 0.5, 150, 150 );

  16. Fog • setFog(FogMode mode, const ColourValue& colour, Real expDensity,Real linearStart, Real linearEnd) • mSceneMgr->setFog( FOG_LINEAR, fadeColour, 0, 0, 7500 );

  17. Terrain • # Heightmap-source specific settings • Heightmap.image=../new_media/terrain_s.png • # If you use RAW, fill in the below too • # RAW-specific setting - size (horizontal/vertical) • #Heightmap.raw.size=257 • # RAW-specific setting - bytes per pixel (1 = 8bit, 2=16bit) • #Heightmap.raw.bpp=2 • # How large is a page of tiles (in vertices)? Must be (2^n)+1 • PageSize=257 • # How large is each tile? Must be (2^n)+1 and be smaller than PageSize • TileSize=17 • # The maximum error allowed when determining which LOD to use • MaxPixelError=3 • # The size of a terrain page, in world units • PageWorldX=15000 • PageWorldZ=15000 • # Maximum height of the terrain • MaxHeight=250 terrain_s.png

  18. Physics Engine

  19. Physics • PhysicsEngine(); • 9 Functions: • void translateFromWorld( const Quaternion &quat, Vector3 *vec); • void translateToWorld( const Quaternion &quat, Vector3 *vec); • void applyForce( const Vector3 *dir, float time); • void applyDrag (const Quaternion &quat, const Vector3 *surface_areas, float coeff, float time); • void update(float time); • void getVelocity( Vector3 *result ); • void setVelocity (const Vector3 *vel); • void getPosition (Vector3 *result ); • void setPosition (const Vector3 *pos); • 3 Values: Position, Velocity, and DragP

  20. Translations: • void translateFromWorld( const Quaternion &quat, Vector3 *vec); • void translateToWorld( const Quaternion &quat, Vector3 *vec); Multiplying a Vector3 by a Quaternion translates the Vector into the Quaternion’s orientation. This is accomplished at the Vector’s location in space (away from the Origin) using complex math

  21. Apply Forces: • void applyForce( const Vector3 *dir, float time); • void applyDrag (const Quaternion &quat, const Vector3 *surface_areas, float coeff, float time); For our plane: time = time since last call to update surface area = 5, 20, 1 coeff = 617.0

  22. Get’s and Set’s • void getVelocity( Vector3 *result ); • void setVelocity (const Vector3 *vel); • void getPosition (Vector3 *result ); • void setPosition (const Vector3 *pos);

  23. Example: • One Force • Two Forces • Drag

  24. Text: • ResourceGroupManager • Holds Location of Font • FontManager • Manages the Font • Creates a resource pointer “font” • Font • Sets size, resolution, etc of font

  25. Creating the Text Area • OverlayManager • Contains OverlayContainer • OverlayContainer “panel” • Has a size and a location • Contains a TextAreaOverlayElement • TextAreaOverlayElement “textArea” • Has a size, location, font, and color

  26. So…. Panel OverlayManager TextArea (font)

  27. Execution • TextArea, and others, are created, and textArea is passed to sampleListener • Every 10 frames, sampleListener updates the text area Calls • OgreCharacter::GetPosit(Vector3 *pos) • OgreCharacter::GetVeloc(Vector3 *pos) • OgreCharacter::GetRelVeloc(Vector3 *pos) • OgreCharacter::GetDrag(Vector3 *pos) • Displays Values

  28. Physics Implementation in OgreCharacter • Handled in the Update function: • OgreCharacter::update (Real elapsedTime, InputReader *input) • 4 forces • Propeler, Drag, Lift, Gravity • 3 Directions of Turning • Pitch, Roll, Yaw (new)

  29. OgreCharacter keeps track of: • Quaternion: world’s orientation • Vectors • Position, Lift, Speed, Drag, Prop • Constants • gravV = Vector3(0.0, -9.8, 0.0); • surface_areas = Vector3( 5, 20, 1); • LIFT_CONSTANT 206.0f • DRAG_CONSTANT 617.0f

  30. Applying Forces • While not Crashed • Apply Gravity • Relative to world • Apply Lift • In Plane’s y direction, relative to speed squared • Apply Drag • Relative to velocity squared, and position • Apply Propeller • In Plane’s z direction • 3.5 to 5

  31. Turning • Pitch • Turns up/down at 10 degree’s a frame • Roll • Rotates Left/Right at 30 degree’s a frame • Yaw • Turns Left/Right at 10 degree’s a frame

  32. Constants • Developed from Drag, Lift equations: • Lift = Coeff. * ρ *V^2 *1/2 * Area • Drag = -1/2 * ρ * v^2 * A * Coeff. • Adjusted for Idle/Top Speeds • Lose lift at ~ 43.5 • Fine Tuned Through Testing: • Lift = 206 • Drag = 617 • Surface Area = 5,20,1

  33. Mouse Listener

  34. MouseListener and MouseMotionListener Our sample listener needs to extend these classes in order to receive mouse events. More information on these classes can be found at: http://www.ogre3d.org/docs/api/html/

  35. Mouse Control • Incorporation of MouseListener and MouseMotionListener • Two classes changed: • class SampleListener • class SampleApplication

  36. Class SampleListener • SampleListener extends: • public ExampleFrameListener, • public MouseListener // Extension added • public MouseMotionListener // Extension added class SampleListener : public ExampleFrameListener, public MouseListener, public MouseMotionListener

  37. SampleListener protected variables • CEGUI::Renderer *mGUIRenderer; // cegui renderer • bool mRMouseDown; // returns true if the mouse button is down • SceneManager *mSceneMgr; // a pointer to the scene manager

  38. SampleListener constructor • Need to pass SampleListener constructor the scene manager and the renderer objects that we created • SampleListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer) • Need to add the mouse listeners so we can process the events for the mouse • mEventProcessor->addMouseListener( this ); • mEventProcessor->addMouseMotionListener( this );

  39. SampleListener public methods • virtual void mousePressed(MouseEvent* e) • // Right mouse button down • else if (e->getButtonID() & MouseEvent::BUTTON1_MASK) • { • mRMouseDown = true; • } • If the right mouse is pushed we need to set the variable to true

  40. SampleListener public methods • virtual void mouseReleased(MouseEvent* e) • // Right mouse released • else if (e->getButtonID() & MouseEvent::BUTTON1_MASK) • { • mRMouseDown = false; • } • If the right mouse button is released we need to set the variable back to false

  41. SampleListener public methods • virtual void mouseDragged (MouseEvent *e) • mouseMoved(e); • // Update CEGUI with the mouse motion • if ( mRMouseDown ) • { • mCamera->yaw( -e->getRelX() * mRotateSpeed ); • mCamera->pitch( -e->getRelY() * mRotateSpeed ); • } • If the mouse button is down then rotate the camera relative to the current position • getRel() - Finds the distance since last time the method was called

  42. Class SampleApplication • Protected • CEGUI::OgreCEGUIRenderer *mGUIRenderer; • CEGUI::System *mGUISystem; • ~SampleApplication() • delete mGUISystem; • delete mGUIRenderer;

  43. Class SampleApplication • void createScene(void) • mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr); • mGUISystem = new CEGUI::System(mGUIRenderer); // Declaration of the mGUI Renderer and System

More Related