FDF (Fil de Fer) is a 42 School graphics project that involves creating a simple 3D wireframe renderer. The program reads a map file containing height values and renders it as a 3D wireframe model with various projections.
"This project is about creating a simplified 3D graphic representation of a relief landscape."
FDF introduces the fundamentals of graphics programming, including managing a window, handling events, and creating images with basic transformations.
- Read and parse 3D map files
- Render 3D wireframe models from height maps
- Implement different projection types (isometric, parallel)
- Apply color gradients based on elevation
- Handle user input for model manipulation (rotation, zoom, translation)
- Efficiently draw lines between points
- Properly manage memory and graphical resources
fdf/
├── includes/
│ └── fdf.h # Header with structures and function prototypes
├── src/
│ ├── color.c # Color handling functions
│ ├── draw.c # Line drawing algorithms
│ ├── god.c # Main rendering and event handling
│ ├── init.c # Initialization functions
│ ├── main.c # Program entry point
│ ├── projections.c # Projection transformations
│ ├── read_file.c # Map file parsing
│ ├── setters.c # Setting various parameters
│ └── utils.c # Utility functions
└── Makefile # Compilation instructions
Color handling and management:
Function | Description |
---|---|
parse_color | Converts hexadecimal color strings (like "0xFF0000") to integer color values |
get_default_color | Assigns default colors based on height values for gradient coloring |
Core drawing algorithms:
Function | Description |
---|---|
draw_line | Implements Bresenham's line algorithm to draw lines between points |
put_pixel | Places a pixel at specific coordinates in the image buffer |
Main rendering and event handling:
Function | Description |
---|---|
render_map | Coordinates the drawing of all lines to create the complete wireframe |
handle_events | Processes user inputs and updates the display parameters accordingly |
Setup and initialization:
Function | Description |
---|---|
init_fdf | Sets up the main FDF structure with default values and settings |
init_mlx | Initializes the MiniLibX graphical context and creates a window |
Program entry point:
Function | Description |
---|---|
main | Parses command-line arguments, initializes structures, and starts the main loop |
3D to 2D coordinate transformations:
Function | Description |
---|---|
apply_isometric | Transforms 3D coordinates to isometric projection (30° rotation) |
apply_parallel | Applies parallel (orthographic) projection to 3D coordinates |
Map file parsing:
Function | Description |
---|---|
read_map | Reads the map file line by line and stores height values in data structure |
parse_line | Parses individual lines into coordinate and color data |
Parameter adjustment:
Function | Description |
---|---|
set_zoom | Automatically adjusts the zoom level based on map dimensions |
set_offsets | Calculates initial offsets to center the map in the window |
Utility functions:
Function | Description |
---|---|
ft_atoi | Converts string representations of numbers to integers |
error_exit | Handles error messages and gracefully exits the program |
- Multiple Projections: Switch between isometric and parallel views
- Dynamic Coloring: Height-based color gradients or custom colors from map files
- Interactive Controls:
- Zoom in/out
- Rotate model
- Pan/translate
- Adjust height factor
- Automatic Scaling: Adapts to different map sizes
- Error Handling: Robust handling of invalid inputs and file formats
The program reads maps with the following format:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 10 10 0 0 10 10 0 0 0 10 10 10 10 10 0 0 0
0 0 10 10 0 0 10 10 0 0 0 0 0 0 0 10 10 0 0
0 0 10 10 0 0 10 10 0 0 0 0 0 0 0 10 10 0 0
0 0 10 10 10 10 10 10 0 0 0 0 10 10 10 10 0 0 0
0 0 0 10 10 10 10 10 0 0 0 10 10 0 0 0 0 0 0
0 0 0 0 0 0 10 10 0 0 0 10 10 0 0 0 0 0 0
0 0 0 0 0 0 10 10 0 0 0 10 10 10 10 10 10 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Each number represents a point in 3D space:
- Position in the grid (x,y)
- Height value (z)
- Optional color in hexadecimal format:
10,0xFF0000
for a red point at height 10
- Graphics programming fundamentals
- 3D to 2D projection mathematics
- Event-driven programming
- Memory management for graphics resources
- File parsing and validation
- Implementation of drawing algorithms
- User interface design for interactive graphics
Metric | Value |
---|---|
Final Score | 100/100 |
File Count | 9 |
Graphics Library | MiniLibX |
Projection Types | 2 |