diff --git a/main.c b/main.c index 5441ad0..aa0e967 100644 --- a/main.c +++ b/main.c @@ -28,9 +28,9 @@ die(char *msg) const rgb WHITE = {255, 255, 255, 255}; const rgb BLACK = {0, 0, 0, 255}; -const rgb RED = {255, 0, 0, 255}; -const rgb GREEN = {0, 255, 0, 255}; -const rgb BLUE = {0, 0, 255, 255}; +const rgb RED = {255, 60, 40, 255}; +const rgb GREEN = {40, 255, 70, 255}; +const rgb BLUE = {50, 70, 255, 255}; const vec3 UP = {0, 1, 0}; @@ -572,12 +572,12 @@ draw_mesh(rgb canvas[], rgb col, camera c, mesh mesh) } else { if (x < 0) { - double col_mod = clamp(vec3_dot(norm, (vec3){200, 200, 200}) * 0.8, 0.0, 255.0); + double col_mod = clamp(vec3_dot(norm, vec3_normalize(c.pos)), 0.0, 1.0); fill_triangle(canvas, (rgb) { - .r = col_mod, - .g = col_mod, - .b = col_mod + .r = col.r * col_mod, + .g = col.g * col_mod, + .b = col.b * col_mod }, project_triangle(c, (triangle3) { v0, v1, v2 @@ -654,6 +654,7 @@ main(void) { sdl_state state = init_sdl(); camera cam = new_camera(180, (vec3){0, 0, 200}, (vec3){0, 0, 0}, UP); + /* print_camera(cam); */ SDL_Event event; @@ -663,7 +664,7 @@ main(void) uint64_t t = 0; - double rot_speed = 0.5; + double rot_speed = 0.6; for (;;) { double elapsed, start = SDL_GetPerformanceCounter(); @@ -676,12 +677,7 @@ main(void) int x, y; uint32_t buttons = SDL_GetMouseState(&x, &y); - if (buttons & SDL_BUTTON(2)) - screenshot(state.canvas); - else if (buttons & (SDL_BUTTON(1))) - wireframe = !wireframe; - - clear_canvas(state.canvas, BLACK); + clear_canvas(state.canvas, (rgb){7, 7, 7, 255}); for (size_t i = 0; i < obj.vertex_num; i++) { obj_copy.vertices[i] = vec3_matrix3x3_multiply(obj.vertices[i], rotation); @@ -690,8 +686,27 @@ main(void) draw_mesh(state.canvas, WHITE, cam, obj_copy); render(state); - if (SDL_PollEvent(&event) && event.type == SDL_QUIT) - break; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: { + switch (event.key.keysym.scancode) { + case SDL_SCANCODE_F3: { + if (!event.key.repeat) wireframe = !wireframe; + break; + } + case SDL_SCANCODE_F6: { + if (!event.key.repeat) screenshot(state.canvas); + break; + } + default: + break; + } + break; + } + case SDL_QUIT: + goto quit; + } + } elapsed = (SDL_GetPerformanceCounter() - start) / (double)SDL_GetPerformanceFrequency() * 1000.0; SDL_Delay(clamp(16.666f - elapsed, 0, 1000)); @@ -699,6 +714,7 @@ main(void) t++; } +quit: free_mesh(obj); free_mesh(obj_copy); free_sdl(state);