|
1 | 1 | # tinyrenderer_rs |
2 | 2 | This repo consists of a rust implementation of the [tinyrenderer](https://github.com/ssloy/tinyrenderer) walkthrough by professor Dmitry V. Sokolov. |
3 | 3 |
|
4 | | -Dependencies: |
| 4 | +## Dependencies: |
5 | 5 | - image 0.24.5: Image loading and manipulation |
6 | 6 | - piston_window 1.127.0: Window to display rendered frames |
7 | 7 | - obj-rs 0.6: To retrieve information from .obj files |
8 | 8 | - nalgebra 0.31.4: For vector and matrix calculations |
| 9 | + |
| 10 | +## Lessons |
| 11 | + |
| 12 | +### Lesson 0 |
| 13 | +Write to an image buffer and render it in a window. |
| 14 | + |
| 15 | +**Branch:** [Lesson_0](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_0) |
| 16 | + |
| 17 | +**Preview:** |
| 18 | + |
| 19 | +### Lesson 1 |
| 20 | +Implement Bressenham's line algorithm. Then, use it to draw the wireframe model of a mesh. |
| 21 | + |
| 22 | +**Branch:** [Lesson_1](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_1) |
| 23 | + |
| 24 | +**Preview:** |
| 25 | + |
| 26 | + |
| 27 | +### Lesson 2 |
| 28 | +Implement triangle filling using both line sweeping algorithm and barycentric coordinates algorithm. Then implement a basic directional lighting model, computing the lighting of each triangle face using its normals. |
| 29 | + |
| 30 | +**Branch:** [Lesson_2](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_2) |
| 31 | + |
| 32 | +**Preview:** |
| 33 | + |
| 34 | + |
| 35 | +### Lesson 3 |
| 36 | +Implement Z-buffer algorithm for back-face culling. Then, apply textures to the mesh. |
| 37 | + |
| 38 | +**Branch:** [Lesson_3](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_3) |
| 39 | + |
| 40 | +**Preview:** |
| 41 | + |
| 42 | + |
| 43 | +### Lesson 4 |
| 44 | +Implement perspective projection. |
| 45 | + |
| 46 | +**Branch:** [Lesson_4](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_4) |
| 47 | + |
| 48 | +**Preview:** |
| 49 | + |
| 50 | + |
| 51 | +### Lesson 5 |
| 52 | +Implement Gouraud shading. Then, implement model view, projection, and viewport transformation matrices. Then, chain the transformation matrices. |
| 53 | + |
| 54 | +**Branch:** [Lesson_5](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_5) |
| 55 | + |
| 56 | +**Preview:** |
| 57 | + |
| 58 | + |
| 59 | +### Lesson 6/6bis |
| 60 | +Structure code into shaders form. Then, implement texture-based normal mapping for the model, using both global coordinate system normal mapping and Darboux frame normal mapping. Lastly, improve lighting by composing the lighting of the model using ambient, diffuse, and specular lighting (Phong shading). |
| 61 | + |
| 62 | +**Branch:** [Lesson_6](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_6) |
| 63 | + |
| 64 | +**Preview:** |
| 65 | + |
| 66 | + |
| 67 | +### Lesson 7 |
| 68 | +Implement hard shadow computation through shadow mapping. |
| 69 | + |
| 70 | +**Branch:** [Lesson_7](https://github.com/ema2159/tinyrenderer_rs/tree/Lesson_7) |
| 71 | + |
| 72 | +**Preview:** |
| 73 | + |
0 commit comments