From a05a68ed6d868d17827159e5df16069a649d2263 Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 17 Jan 2020 14:51:23 +0100 Subject: No more segfault (for now), raycasting is broken --- render_state.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'render_state.c') diff --git a/render_state.c b/render_state.c index 82ee588..e9c803a 100644 --- a/render_state.c +++ b/render_state.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/15 14:40:14 by cacharle #+# #+# */ -/* Updated: 2020/01/16 10:03:01 by cacharle ### ########.fr */ +/* Updated: 2020/01/17 14:48:15 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,7 +29,7 @@ void rstate_ray(t_state *state, t_render_state *rstate) { double camera_x; - camera_x = 2 * rstate->x / (double)state->window.width - 1; + camera_x = 2.0 * (double)rstate->x / (double)state->window.width - 1.0; rstate->ray = vector_add(state->dir, vector_scale(state->plane, camera_x)); } @@ -136,13 +136,29 @@ void rstate_next_probe(t_render_state *rstate) double rstate_perp_dist(t_state *state, t_render_state *rstate) { + double dist; + + /* printf("ray [%f %f]\n", rstate->ray.x, rstate->ray.y); */ + dist = 1.0; if (rstate->side == SIDE_NS) - return ((rstate->map_pos.x - state->pos.x + (1.0 - rstate->map_step.x) / 2.0) / rstate->ray.x); // fait des trucs bizzare - /* return (rstate->map_pos.y - state->pos.y + state->dir.y); */ + { + dist = rstate->map_pos.y - state->pos.y; + dist += rstate->map_step.y == 1 ? 1 : 0; + dist /= rstate->ray.y; + } else if (rstate->side == SIDE_WE) - return ((rstate->map_pos.y - state->pos.y + (1.0 - rstate->map_step.y) / 2.0) / rstate->ray.y); - /* return (rstate->map_pos.x - state->pos.x + state->dir.x); */ - return (1.0); + { + dist = rstate->map_pos.x - state->pos.x; + dist += rstate->map_step.x == 1 ? 1 : 0; + dist /= rstate->ray.x; + } + return dist; + + /* if (rstate->side == SIDE_NS) */ + /* return fabs(rstate->map_pos.y - state->pos.y + state->dir.y); */ + /* else if (rstate->side == SIDE_WE) */ + /* return fabs(rstate->map_pos.x - state->pos.x + state->dir.x); */ + /* return (1.0); */ } /* @@ -152,8 +168,9 @@ double rstate_perp_dist(t_state *state, t_render_state *rstate) void rstate_line_height(t_state *state, t_render_state *rstate) { - rstate->line_height = - (int)((double)state->window.height / rstate_perp_dist(state, rstate)); + /* double perp = rstate_perp_dist(state, rstate); */ + /* printf("perp %f\n", perp); */ + rstate->line_height = (int)((double)state->window.height / rstate_perp_dist(state, rstate)); } t_image *get_tex(t_state *state, t_render_state *rstate) -- cgit