Projection equation and first cube
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include "camera/camera.h"
|
||||
#include "mem_arena.h"
|
||||
#include "mem_utils.h"
|
||||
#include "misc/misc_utils.h"
|
||||
@@ -11,6 +12,12 @@
|
||||
int main(void) {
|
||||
colour_t bg =
|
||||
(colour_t){.rgba.r = 27, .rgba.g = 38, .rgba.b = 79, .rgba.a = 255};
|
||||
camera_t camera = {
|
||||
.position = {.x = 0.0f, .y = 0.0f, .z = 0.0f},
|
||||
.rotation = {.x = 0.0f, .y = 0.0f, .z = 0.0f},
|
||||
};
|
||||
vec3f_t viewport = {.x = 1.0f, .y = 1.0f, .z = 1.0f};
|
||||
|
||||
window_t window = {0};
|
||||
|
||||
if (!init_window(&window, 800, 800, "CG From Scratch Rasteriser")) {
|
||||
@@ -25,14 +32,47 @@ int main(void) {
|
||||
// i32 h_min = ((i32)window.half_height) * -1;
|
||||
// i32 h_max = (i32)window.half_height;
|
||||
|
||||
triangle_t triangle = {
|
||||
.p0 = {-200, -250},
|
||||
.p1 = {200, 50},
|
||||
.p2 = {20, 250},
|
||||
.h0 = 0,
|
||||
.h1 = 0,
|
||||
.h2 = 1,
|
||||
};
|
||||
// The four "front" vertices
|
||||
vec3f_t vAf = {-2, -0.5, 5};
|
||||
vec3f_t vBf = {-2, 0.5, 5};
|
||||
vec3f_t vCf = {-1, 0.5, 5};
|
||||
vec3f_t vDf = {-1, -0.5, 5};
|
||||
|
||||
// The four "back" vertices
|
||||
vec3f_t vAb = {-2, -0.5, 6};
|
||||
vec3f_t vBb = {-2, 0.5, 6};
|
||||
vec3f_t vCb = {-1, 0.5, 6};
|
||||
vec3f_t vDb = {-1, -0.5, 6};
|
||||
|
||||
// The front face
|
||||
line_t lABf = {project_point(vAf, &window, &camera, viewport),
|
||||
project_point(vBf, &window, &camera, viewport)};
|
||||
line_t lBCf = {project_point(vBf, &window, &camera, viewport),
|
||||
project_point(vCf, &window, &camera, viewport)};
|
||||
line_t lCDf = {project_point(vCf, &window, &camera, viewport),
|
||||
project_point(vDf, &window, &camera, viewport)};
|
||||
line_t lDAf = {project_point(vDf, &window, &camera, viewport),
|
||||
project_point(vAf, &window, &camera, viewport)};
|
||||
|
||||
// The back face
|
||||
line_t lABb = {project_point(vAb, &window, &camera, viewport),
|
||||
project_point(vBb, &window, &camera, viewport)};
|
||||
line_t lBCb = {project_point(vBb, &window, &camera, viewport),
|
||||
project_point(vCb, &window, &camera, viewport)};
|
||||
line_t lCDb = {project_point(vCb, &window, &camera, viewport),
|
||||
project_point(vDb, &window, &camera, viewport)};
|
||||
line_t lDAb = {project_point(vDb, &window, &camera, viewport),
|
||||
project_point(vAb, &window, &camera, viewport)};
|
||||
|
||||
// The front-to-back edges
|
||||
line_t lABfb = {project_point(vAf, &window, &camera, viewport),
|
||||
project_point(vAb, &window, &camera, viewport)};
|
||||
line_t lBCfb = {project_point(vBf, &window, &camera, viewport),
|
||||
project_point(vBb, &window, &camera, viewport)};
|
||||
line_t lCDfb = {project_point(vCf, &window, &camera, viewport),
|
||||
project_point(vCb, &window, &camera, viewport)};
|
||||
line_t lDAfb = {project_point(vDf, &window, &camera, viewport),
|
||||
project_point(vDb, &window, &camera, viewport)};
|
||||
|
||||
Arena *arena = NULL;
|
||||
u64 capacity = 10ull * 1024ull * 1024ull * 1024ull;
|
||||
@@ -51,10 +91,20 @@ int main(void) {
|
||||
|
||||
clear_window(&window, bg);
|
||||
|
||||
draw_shaded_triangle(&window, arena, triangle,
|
||||
(colour_t){.colour = 0x00ff00ff});
|
||||
draw_wireframe_triangle(&window, arena, triangle,
|
||||
(colour_t){.colour = 0xff008aff});
|
||||
draw_line(&window, arena, lABf, (colour_t){.colour = 0xffaa00ff});
|
||||
draw_line(&window, arena, lBCf, (colour_t){.colour = 0xffaa00ff});
|
||||
draw_line(&window, arena, lCDf, (colour_t){.colour = 0xffaa00ff});
|
||||
draw_line(&window, arena, lDAf, (colour_t){.colour = 0xffaa00ff});
|
||||
|
||||
draw_line(&window, arena, lABb, (colour_t){.colour = 0x00ffaaff});
|
||||
draw_line(&window, arena, lBCb, (colour_t){.colour = 0x00ffaaff});
|
||||
draw_line(&window, arena, lCDb, (colour_t){.colour = 0x00ffaaff});
|
||||
draw_line(&window, arena, lDAb, (colour_t){.colour = 0x00ffaaff});
|
||||
|
||||
draw_line(&window, arena, lABfb, (colour_t){.colour = 0xee0099ff});
|
||||
draw_line(&window, arena, lBCfb, (colour_t){.colour = 0xee0099ff});
|
||||
draw_line(&window, arena, lCDfb, (colour_t){.colour = 0xee0099ff});
|
||||
draw_line(&window, arena, lDAfb, (colour_t){.colour = 0xee0099ff});
|
||||
|
||||
swap_buffers(&window);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user