first part algo
This commit is contained in:
parent
8eed6feb6b
commit
f7f92cbaa8
3 changed files with 132 additions and 38 deletions
6
Makefile
6
Makefile
|
@ -3,16 +3,16 @@
|
|||
# ::: :::::::: #
|
||||
# Makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: grobledo <grobledo@student.42.fr> +#+ +:+ +#+ #
|
||||
# By: greg <greg@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/07/29 13:08:42 by greg #+# #+# #
|
||||
# Updated: 2024/10/01 18:58:09 by grobledo ### ########.fr #
|
||||
# Updated: 2024/10/03 17:00:43 by greg ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = cub3d
|
||||
|
||||
SRC =
|
||||
SRC = algo.c
|
||||
|
||||
OBJS = ${SRC:.c=.o}
|
||||
|
||||
|
|
139
algo.c
139
algo.c
|
@ -3,50 +3,127 @@
|
|||
/* ::: :::::::: */
|
||||
/* algo.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: grobledo <grobledo@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: greg <greg@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/01 16:24:58 by grobledo #+# #+# */
|
||||
/* Updated: 2024/10/01 18:57:51 by grobledo ### ########.fr */
|
||||
/* Updated: 2024/10/03 17:42:13 by greg ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "algo.h"
|
||||
|
||||
|
||||
int algo(struct)
|
||||
static int initalgo(t_ray *ray)
|
||||
{
|
||||
double posX;
|
||||
double posY; //position x et y du joueur sur la map
|
||||
double dirX;
|
||||
double dirY; // orientation du joeur sur la map
|
||||
double planeX;
|
||||
double planeY;// position de la cam
|
||||
double currtime; // temps frame actuelle
|
||||
double oldtime; // temps derniere frame
|
||||
ray->posX = 2;
|
||||
ray->posY = 2;
|
||||
ray->dirX = -1;
|
||||
ray->dirY = 0;
|
||||
ray->planeX = 0;
|
||||
ray->planeY = 0.66; // FOV de 66 degres
|
||||
ray->currtime = 0;
|
||||
ray->oldtime = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
posX = 2;
|
||||
posY = 2;
|
||||
dirX = -1;
|
||||
dirY = 0;
|
||||
planeX = 0;
|
||||
planeY = 0.66; // FOV de 66 degres
|
||||
currtime = 0;
|
||||
oldtime = 0;
|
||||
|
||||
int algo()
|
||||
{
|
||||
t_ray ray;
|
||||
int x;
|
||||
double width;
|
||||
int height;
|
||||
// quelle box sur la map on est
|
||||
int mapX;
|
||||
int mapY;
|
||||
// wall hit and if yes in wich direction
|
||||
int hit;
|
||||
int side;
|
||||
|
||||
initalgo(&ray);
|
||||
// init image;
|
||||
|
||||
|
||||
x = 0;
|
||||
width = 640;
|
||||
height = 480;
|
||||
while (x < w)
|
||||
{
|
||||
// position et direction du rayon
|
||||
ray.cameraX = 2 * x / width - 1;
|
||||
ray.raydirX = ray.dirX + ray.planeX * ray.cameraX;
|
||||
ray.raydirY = ray.dirY + ray.planeY * ray.cameraX;
|
||||
|
||||
mapX = (int)ray.posX;
|
||||
mapY = (int)ray.posY;
|
||||
|
||||
ray.deltadistX = (ray.raydirX == 0) ? 1e30 : fabs(1 / ray.raydirX);
|
||||
ray.deltadistY = (ray.raydirY == 0) ? 1e30 : fabs(1 / ray.raydirY);
|
||||
|
||||
hit = 0;
|
||||
|
||||
//calculate step and initial sideDist
|
||||
if (ray.raydirX < 0)
|
||||
{
|
||||
ray.stepX = -1;
|
||||
ray.sidedistX = (ray.posX - mapX) * ray.deltadistX;
|
||||
}
|
||||
else
|
||||
{
|
||||
ray.stepX = 1;
|
||||
ray.sidedistX = (mapX + 1.0 - ray.posX) * ray.deltadistX;
|
||||
}
|
||||
if (ray.raydirY < 0)
|
||||
{
|
||||
ray.stepY = -1;
|
||||
ray.sidedistY = (ray.posY - mapY) * ray.deltadistY;
|
||||
}
|
||||
else
|
||||
{
|
||||
ray.stepY = 1;
|
||||
ray.sidedistY = (mapY + 1.0 - ray.posY) * ray.deltadistY;
|
||||
}
|
||||
while(hit == 0)
|
||||
{
|
||||
//jump to next map square, either in x-direction, or in y-direction
|
||||
if(ray.sidedistX < ray.sidedistY)
|
||||
{
|
||||
ray.sidedistX += ray.deltadistX;
|
||||
mapX += ray.stepX;
|
||||
side = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ray.sidedistY += ray.deltadistY;
|
||||
mapY += ray.stepY;
|
||||
side = 1;
|
||||
}
|
||||
//Check if ray has hit a wall
|
||||
if(worldMap[mapX][mapY] == 1)
|
||||
hit = 1;
|
||||
}
|
||||
if(side == 0)
|
||||
ray.perpwalldist = (ray.sidedistX - ray.deltadistX);
|
||||
else
|
||||
ray.perpwalldist = (ray.sidedistY - ray.deltadistY);
|
||||
//Calculate height of line to draw on screen
|
||||
int lineHeight = (int)(height / ray.perpwalldist);
|
||||
lineHeight = (int)(height / ray.perpwalldist);
|
||||
|
||||
//calculate lowest and highest pixel to fill in current stripe
|
||||
int drawStart;
|
||||
drawStart = -lineHeight / 2 + height / 2;
|
||||
if(drawStart < 0)
|
||||
drawStart = 0;
|
||||
int drawEnd;
|
||||
if(drawEnd >= height)
|
||||
drawEnd = height - 1;
|
||||
|
||||
}
|
||||
return (0);
|
||||
|
||||
}
|
||||
|
||||
// int initalgo(struct)
|
||||
// {
|
||||
// posX = 2;
|
||||
// posY = 2;
|
||||
// dirX = -1;
|
||||
// dirY = 0;
|
||||
// planeX = 0;
|
||||
// planeY = 0.66; // FOV de 66 degres
|
||||
// currtime = 0;
|
||||
// oldtime = 0;
|
||||
// return (0);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
|
25
algo.h
25
algo.h
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* algo.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: grobledo <grobledo@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: greg <greg@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/09/30 15:45:59 by grobledo #+# #+# */
|
||||
/* Updated: 2024/10/01 18:57:39 by grobledo ### ########.fr */
|
||||
/* Updated: 2024/10/03 17:26:27 by greg ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
|||
#include <unistd.h>
|
||||
#include <math.h>
|
||||
|
||||
typedef struct s_player
|
||||
typedef struct s_ray
|
||||
{
|
||||
// pos player on map
|
||||
double posX;
|
||||
|
@ -31,6 +31,23 @@ typedef struct s_player
|
|||
double currtime;
|
||||
// last frame
|
||||
double oldtime;
|
||||
} t_player;
|
||||
// camera pos
|
||||
double cameraX;
|
||||
// direction rayon
|
||||
double raydirX;
|
||||
double raydirY;
|
||||
// longueur du rayon entre pos actuelle et pos du prochain cote d'une box
|
||||
double sidedistX;
|
||||
double sidedistY;
|
||||
// longueur du rayon entre pos d'un cote d'une box jusqu'a pos du prochain cote d'une box
|
||||
double deltadistX;
|
||||
double deltadistY;
|
||||
// calcul lenght of ray (shortest perpendicular distance between wall and camera plane)
|
||||
double perpwalldist;
|
||||
// step direction (can be -1 or +1)
|
||||
int stepX;
|
||||
int stepY;
|
||||
//wall hit?
|
||||
} t_ray;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue