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 has to be implemented by the application programmer. Hierarchical structures although indirectly supported using Push and Pop matrix operations have no direct support in OpenGL.
You task is to develop a set of C++ 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.
- 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.
- Other project Ideas may be discussed with the unit leader.
You are required to use the NGL graphics library as part of the assignment, if more functionality is required a software update request can be made to Jon Macey or you may use other libraries but this must be justified in the design of the project. It is also expected that the project uses the main Qt development system and is capable of running within this environment. Third party libraries such as GLUT should not be used, however if you are developing a game SDL could be considered.
It is suggested that the program be written using C++ and OpenGL however any system may be used for the final program.
For example Python exporting to renderman for rendering would be acceptable, however realtime visualisation with OpenGL for the system would be a bonus.
For the first part of the project a report should be submitted containing 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. Initial design of the C++ data structures and algorithms required should also be carried out however no code is expected to be submitted at this stage. Note that it is expected that most of the design will be in the form of a “programming sketch book” using hand drawn data diagrams, a full written report is not expected at this stage. The main emphasis is the research and design into the area chosen. At this stage we are more interested in Code design and the algorithmic approach to the problem and not the cosmetic / artistic design of the program.
The 2nd part of the assignment involves the implementation of the system based on the initial research and design. As software design is an iterative process it is expected that the actual program will have evolved from the initial report and this process should be reflected on in the final 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 program must be able to be configured by the use of a text based configuration file to set-up initial program states or values.
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 analyze 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
- Initial Program design and background research report.
- Code Documentation / Design and report on algorithms used.
- Use and understanding of Object Oriented Programming.
- Use and understanding of OpenGL / Computer Graphics API’s.
- Reading Config file to configure the program.
- Following the NCCA coding standard.
- Project specific, Use of a GUI, efficiency and/or Visual impact.