handle input correctly
This commit is contained in:
parent
59937f3cd5
commit
a539bf2b8f
48
main.c
48
main.c
|
@ -28,9 +28,9 @@ die(char *msg)
|
||||||
|
|
||||||
const rgb WHITE = {255, 255, 255, 255};
|
const rgb WHITE = {255, 255, 255, 255};
|
||||||
const rgb BLACK = {0, 0, 0, 255};
|
const rgb BLACK = {0, 0, 0, 255};
|
||||||
const rgb RED = {255, 0, 0, 255};
|
const rgb RED = {255, 60, 40, 255};
|
||||||
const rgb GREEN = {0, 255, 0, 255};
|
const rgb GREEN = {40, 255, 70, 255};
|
||||||
const rgb BLUE = {0, 0, 255, 255};
|
const rgb BLUE = {50, 70, 255, 255};
|
||||||
|
|
||||||
const vec3 UP = {0, 1, 0};
|
const vec3 UP = {0, 1, 0};
|
||||||
|
|
||||||
|
@ -572,12 +572,12 @@ draw_mesh(rgb canvas[], rgb col, camera c, mesh mesh)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (x < 0) {
|
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,
|
fill_triangle(canvas,
|
||||||
(rgb) {
|
(rgb) {
|
||||||
.r = col_mod,
|
.r = col.r * col_mod,
|
||||||
.g = col_mod,
|
.g = col.g * col_mod,
|
||||||
.b = col_mod
|
.b = col.b * col_mod
|
||||||
},
|
},
|
||||||
project_triangle(c, (triangle3) {
|
project_triangle(c, (triangle3) {
|
||||||
v0, v1, v2
|
v0, v1, v2
|
||||||
|
@ -654,6 +654,7 @@ main(void)
|
||||||
{
|
{
|
||||||
sdl_state state = init_sdl();
|
sdl_state state = init_sdl();
|
||||||
camera cam = new_camera(180, (vec3){0, 0, 200}, (vec3){0, 0, 0}, UP);
|
camera cam = new_camera(180, (vec3){0, 0, 200}, (vec3){0, 0, 0}, UP);
|
||||||
|
|
||||||
/* print_camera(cam); */
|
/* print_camera(cam); */
|
||||||
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
|
@ -663,7 +664,7 @@ main(void)
|
||||||
|
|
||||||
uint64_t t = 0;
|
uint64_t t = 0;
|
||||||
|
|
||||||
double rot_speed = 0.5;
|
double rot_speed = 0.6;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
double elapsed, start = SDL_GetPerformanceCounter();
|
double elapsed, start = SDL_GetPerformanceCounter();
|
||||||
|
|
||||||
|
@ -676,12 +677,7 @@ main(void)
|
||||||
int x, y;
|
int x, y;
|
||||||
uint32_t buttons = SDL_GetMouseState(&x, &y);
|
uint32_t buttons = SDL_GetMouseState(&x, &y);
|
||||||
|
|
||||||
if (buttons & SDL_BUTTON(2))
|
clear_canvas(state.canvas, (rgb){7, 7, 7, 255});
|
||||||
screenshot(state.canvas);
|
|
||||||
else if (buttons & (SDL_BUTTON(1)))
|
|
||||||
wireframe = !wireframe;
|
|
||||||
|
|
||||||
clear_canvas(state.canvas, BLACK);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < obj.vertex_num; i++) {
|
for (size_t i = 0; i < obj.vertex_num; i++) {
|
||||||
obj_copy.vertices[i] = vec3_matrix3x3_multiply(obj.vertices[i], rotation);
|
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);
|
draw_mesh(state.canvas, WHITE, cam, obj_copy);
|
||||||
|
|
||||||
render(state);
|
render(state);
|
||||||
if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
|
while (SDL_PollEvent(&event)) {
|
||||||
break;
|
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;
|
elapsed = (SDL_GetPerformanceCounter() - start) / (double)SDL_GetPerformanceFrequency() * 1000.0;
|
||||||
SDL_Delay(clamp(16.666f - elapsed, 0, 1000));
|
SDL_Delay(clamp(16.666f - elapsed, 0, 1000));
|
||||||
|
@ -699,6 +714,7 @@ main(void)
|
||||||
t++;
|
t++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
free_mesh(obj);
|
free_mesh(obj);
|
||||||
free_mesh(obj_copy);
|
free_mesh(obj_copy);
|
||||||
free_sdl(state);
|
free_sdl(state);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user