diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-17 14:51:23 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-17 14:51:23 +0100 |
| commit | a05a68ed6d868d17827159e5df16069a649d2263 (patch) | |
| tree | 338058411cea5b514c13390d845f7577bca70199 /render_state.c | |
| parent | 75c7e5548de908c37c0fbdd49df50f3e7447e120 (diff) | |
| download | cub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.gz cub3d-a05a68ed6d868d17827159e5df16069a649d2263.tar.bz2 cub3d-a05a68ed6d868d17827159e5df16069a649d2263.zip | |
No more segfault (for now), raycasting is broken
Diffstat (limited to 'render_state.c')
| -rw-r--r-- | render_state.c | 35 |
1 files changed, 26 insertions, 9 deletions
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 <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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) |
