OpenGL is a relative low-level 3d API which does not support object/scene management. This is usually left to the user of the API. For example, importing and exporting data to and from OpenGL must be implemented by the application programmer. Hierarchical structures although indirectly supported using shader matrix operations have no direct support in OpenGL.
You task is to develop a set classes / data structures and algorithms that provide a high level OpenGL object/scene management for one of the following:
- Develop a small library that provide an interface that allows the simulation of real world physic such as gravity, friction springs; To demonstrate the library a simple particle system with physics and collisions could be written.
- A simple 3D game using OpenGL which should allow for the detection of object collisions in 3D space and user control of the game characters. (3D space invaders would be a good example).
- Develop a framework that allows the simulation of a Craig Reynolds-like flocking system using OpenGL. The system should allow for any number of boids to be added to the scene, with detection of objects within a scene. (see http://www.red3d.com/cwr/boids/)
- Develop a system that provide an interface that allows L-systems (Lindermayer systems) based modelling of plant like structures using OpenGL. The L system should read in the grammar of the system from a file.
- A simple raytracing framework that will read a scene file and render out the scene using materials / lights supplied in the scene file.
- A “Fantasy UI” most movies / TV shows have interesting interactive computer systems, using OpenGL and shaders create a futuristic User Interface for examples see here https://www.pushing-pixels.org/fui/ Other project Ideas may be discussed with the unit leader. A list of ideas can be found here https://nccastaff.bournemouth.ac.uk/jmacey/ProgProj/
You are encouraged to use the NGL graphics library as part of the assignment ( http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/index.html) as this will be used in the Lectures and Labs to demonstrate graphics principles.
Whilst the lectures are taught using C++ you may choose any suitable programming language to complete the project, for example the NGL Python bindings will allow you to use python instead of C++.
Your code should be uploaded to this GitHub classroom. https://classroom.github.com/a/nsiXV6lM which we will setup in the Lab. You are expected to add work to the repository at regular interval to show the development process and this will form part of the formative assessment for this unit. Feedback on code and design will be given as part of the code review process when it is submitted.
The final report should be written using the GitHub README.md file for the repository you create and contain the initial research into the topic including references to sources and initial design consideration for the project. Marks will be awarded for clarity of research and use of images / algorithms. As software design is an iterative process it is expected that the actual program will have evolved, and this process should be reflected on in the project report. Marks will be awarded for good use of C++, data structure design and documentation of the code with respect to and algorithms and techniques used. The project is expected to build with CMake and vcpkg (as taught in the class).
Intended Learning Outcomes
This assignment will allow you to demonstrate your ability of the following learning outcomes.
understand and apply Object Oriented concepts and techniques to the design and implementation of CGI systems
demonstrate an ability to analyse and select suitable data structures for program development.
demonstrate an ability to understand and implement computer animation related algorithms using OOP
develop GUI based systems using a suitable API for animation
Assessment Criteria and Weightings
- Code Documentation / Design, background research and submission of code on Github- 20 marks.
- Use and understanding of Object Oriented Programming - 25 marks
- Use and understanding of OpenGL / Computer Graphics API’s including cmake - 25 marks
- Following the NCCA coding standard 10 marks
- Project specific, Use of a GUI, efficiency and/or Visual impact - 20 marks