C/C++ 编程代写
当前位置:以往案例 > >C++编程案例:(Final)ProjectFour C++ OpenGL
2019-05-05


(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


在线提交订单