Computer graphics has become more and more popular. Starting from representing 2D sprites by computing basic geometry (points, rectangles, triangles), it can now represent complex 3D scenes with different kind of lights, with explosions, fluids, mirrors… The writing of graphics programs for developers has become easy, thanks to the combination of:
- Easy-to-use API such as DirectX and OpenGL which facilitates the communication with the hardware
- Easy-to-use graphic cards, which make most of the computation (Back-buffering, lightening computation, Z-comparison…), which unloads this part from the program.
The objective of this project was to implement these both sides (software and hardware) in order to provide a final easy-to-use API in C for a NIOS processor to run on a DE2 board. This project was an extension of course ECE5760 of Bruce Land, in which I implemented some parts of the graphic card, in a static way. These implementations faced some issues:
- Synchronization between the NIOS, the Graphic Card and the VGA controller;
- Performances, at different levels: Rapidity ; Low-hardware consumption ; Flexibility
- Efficient management of memory, specifically the SRAM which is used by both the graphic card and the VGA controller;
The goal of these implementations was to implement common techniques of computer graphics:
- For the hardware (Graphic card), in Verilog: Triangle rasterization; Linear extrapolation; Z-Buffering; Light computation
- For the software (API), in C: Communication with the graphic card; Geometry structures to facilitate the manipulation of data o Matrix structures to compute transformations.
Full report (pdf)
source code (zip)