(Final)ProjectFour
Description: In this final project, you will be implementing a game or interactive demonstration thatintegrates one or more additional capabilities of your choice into the scene graph architecture. Additionally you will be adding three specified functionalities to the scene graph architecture. These include the capability to search for a particular SceneNode, a class for background sounds, and implementation light sources that are part of the scene graph with positions and orientations that are updatedaccordingly.
You should download the CSE387ProjectXXX.ziparchive and use it as your starting point for the project.
DemonstrationorGame
Implement a game using the architecture that we have created during the course of the semester. The project should function smoothly and be interactive. It should also be aesthetically appealing i.e. look good. The project should incorporate the capabilities and functionality that we have worked on during the semester. You are expected to also learn about additional computer graphics / game topics and incorporate one or more into the project. Whatever you develop needs to be incorporated intothescenegraph/renderingarchitecturethatwehavecreated.
ProjectRequirements
● Fog,Transparency,andBlending
0 Includeatleastoneofthese
0 SimulatedLighting
0 Integratelightingintothescenegrapharchitecture(seebelow)andilluminatethescene usingmultiplelightsourcesofatleasttwodifferenttypes
0 ModelLoading
0 Incorporateatleastthreedifferentmodelsintothescene.Eachshouldbetexture mapped.DonotusemodelsthatIhavepreviouslyusedinclass.
0 ScriptBasedMotion
0 Includeatleastoneobjectwithmovementcontrolledbyascript.
0 PhysicsBasedMotion
0 Includeatleastoneobjectwithmovementcontrolledbythephysicsenginethat interactswithotherobjectsinyourscene.
0 CustomCollisionReactionthroughScripts
0 Implementcustomizationreactionforcollisionand/ortriggereventsinscripts.
0 SpatializedSound
0 Includebothspatializedandbackgroundsounds(seebelow)
SuggestedNewCapabilitiesandPlacestoStart:
2DText http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-11-2d-text/https://learnopengl.com/#!In-Practice/Text-Rendering
CSE387-Page1of4
CSE387ProjectFourFall2017.docx
Billboards
http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/billboards/
Bloom
https://learnopengl.com/#!Advanced-Lighting/BloomAdditionalBulletPhysics
0 TriggerZones
0 Constraints
0 VehicleandCharacterControllers
0 SoftBodyDynamics
https://github.com/bulletphysics/bullet3/blob/master/docs/Bullet_User_Manual.pdfhttp://bulletphysics.org/mediawiki-1.5.8/index.php/Tutorial_Articleshttp://bulletphysics.org/mediawiki-1.5.8/index.php/Tutorials
CubeMaps/SkyBoxes/EnvironmentMapping https://learnopengl.com/#!Advanced-OpenGL/Cubemapshttp://ogldev.atspace.co.uk/www/tutorial25/tutorial25.html
DeferredShading https://learnopengl.com/#!Advanced-Lighting/Deferred-Shadinghttp://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html
Flocking https://www.red3d.com/cwr/boids/
GeometryShader/ExplodingObjects https://learnopengl.com/#!Advanced-OpenGL/Geometry-Shader
HeightMaps http://www.mbsoftworks.sk/index.php?page=tutorials&series=1&tutorial=24
HighDynamicRange(HDR) https://learnopengl.com/#!Advanced-Lighting/HDR
Instancing https://learnopengl.com/#!Advanced-OpenGL/Instancing
LightMaps(Shadows) http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-15-lightmaps/
Normal(Bump)Mapping http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/https://learnopengl.com/#!Advanced-Lighting/Normal-Mapping
ParallaxMapping https://learnopengl.com/#!Advanced-Lighting/Parallax-Mapping
ParticleSystems http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/particles-instancing/http://ogldev.atspace.co.uk/www/tutorial28/tutorial28.html
PhysicallyBasedRendering https://learnopengl.com/#!PBR/Theoryhttps://learnopengl.com/#!PBR/Lighting
PointShadows https://learnopengl.com/#!Advanced-Lighting/Shadows/Point-Shadowshttp://ogldev.atspace.co.uk/www/tutorial43/tutorial43.html
PickingusingBullet http://www.opengl-tutorial.org/miscellaneous/clicking-on-objects/picking-with-a-physics-library/
CSE387-Page2of4
CSE387ProjectFourFall2017.docx
Screen-SpaceAmbientOcclusion(SSAO) https://learnopengl.com/#!Advanced-Lighting/SSAOhttp://ogldev.atspace.co.uk/www/tutorial45/tutorial45.html
ShadowMapping http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/https://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mappinghttp://ogldev.atspace.co.uk/www/tutorial23/tutorial23.htmlhttp://ogldev.atspace.co.uk/www/tutorial24/tutorial24.htmlhttp://ogldev.atspace.co.uk/www/tutorial47/tutorial47.html
SteeringBehaviors https://www.red3d.com/cwr/steer/
SkeletalAnimationwithASSIMP http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html
SceneGraphDevelopment-Find
BehaviorScripts often need reference additional SceneNodes besides the one that they are attached to. One way to do this is to add a data member to the script and simply assigned the specific SceneNodetothatdatamember.
In a BehaviorScript, it is often necessary to search the game scene for one or more SceneNodes. Add a name property to the SceneNode class. Modify SceneNode sub-classes as necessary to support this. Implement a Find method that can be used to search the entire scene graph of a sub-branch of the graph for a particular SceneNode based on the name. The method should return a reference to the SceneNode if it is found or nullptr if the name was not found in the branch the scene graphthatwassearched.
Optionally, you may also wish to add “Tag” and/or “Layer” functionality that can be used to classify a SceneNode as being part of a group. One way to implement these would be to use collision masks such as we have discussed in class. These can be used in numerous ways throughout a game engine. For instance, a tag might be used to designate membership in an “enemy” group. When a collision with any “enemy” in the group occurred, a BehaviorScript attached to one of the SceneNodes in the collision might specialize its execution based on the tag. Layers might be used to control what does and does not get rendered in the view of a Camera or designate what types of collisionsareofinterest.
SceneGraphDevelopment-Lights
Light sources are the one thing we have not yet integrated into our scene graph architecture. Create a Light or LightSource class that is a sub-class of SceneNode. Implement positional, directional, and spot lights that give off ambient, diffuse, and/or specular reflection by providing all of the necessary functionality in the class or through sub-classes of the class. Positions, directions, and spot light directions should be automatically updated based on translations and rotations of the light. One way to do this would be to automatically attach a BehaviorScript to each light source that updates these properties of the light. Instead of attaching this script in the Scene class, this script could instead be instantiated and attached in the constructor of the light. It should be possible to set all properties of thelightsourcesthroughtheclassorclassesthatyoucreate.
CSE387-Page3of4
CSE387ProjectFourFall2017.docx
SceneGraphDevelopment-SoundBackground
Addasub-classofSoundSourcethatcanbeusedtoplaynon-spatializedbackgroundsounds.
Turnitin
Submissioninstructionsforthisprojectaresimilartolabs.
1. Copythefoldercontainingyoursolutiontothedesktop.
2. Change the name of the folder to CSE387ProjectFour followed by your unique identifier. For instance“CSE387ProjectFourBachmaer.”
3. Openthesolution.Makesureitstillruns.
4. CleanthesolutionbyselectingBuild->CleanSolution.
5. Zipupthesolutionfolderusingthestandardwindowscompressiontool.(No7zips,rars,etc.)
6. Submityourziparchiveofthesolutionthroughcanvas.
CSE387-Page4of4
C++编程案例:(Final)ProjectFour C++ OpenGL
2019-05-05