Abstract:
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)