fix: render *
fix: - fix texture for each direction (north texture is in north etc) - fix mirror textures (the left of each texture is at its left) - fix dimensions (walls are 1x1 for any window dimensions or FOV) - optimize render() dev: - add testmaps/good_directions_test.cub - add textures/test/*.xpm
This commit is contained in:
parent
184c8a60af
commit
6007f27510
14 changed files with 488 additions and 164 deletions
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* const.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/31 17:00:59 by mc #+# #+# */
|
||||
/* Updated: 2024/11/07 19:26:53 by mc ### ########.fr */
|
||||
/* Updated: 2024/11/12 17:56:05 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* include.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/31 16:22:09 by mc #+# #+# */
|
||||
/* Updated: 2024/10/31 18:03:26 by mc ### ########.fr */
|
||||
/* Updated: 2024/11/12 17:41:11 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
|||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
# include <X11/keysym.h>
|
||||
# include <X11/X.h>
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* map.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/01 13:59:04 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/11/06 19:24:03 by mc ### ########.fr */
|
||||
/* Updated: 2024/11/12 15:10:07 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -82,7 +82,7 @@ typedef struct s_player
|
|||
{
|
||||
// pos player on map (cases)
|
||||
t_point_double pos;
|
||||
// player rotation (rad)
|
||||
// player rotation (rad) (0 rad is -y / pi/2 rad is +x)
|
||||
double rot;
|
||||
} t_player;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/31 17:13:20 by mc #+# #+# */
|
||||
/* Updated: 2024/11/04 13:47:47 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/11/12 12:24:02 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
# include "include.h"
|
||||
|
||||
# include "utils.h"
|
||||
# include "temp.h"
|
||||
# include "const.h"
|
||||
# include "global.h"
|
||||
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* temp.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/31 17:04:08 by mc #+# #+# */
|
||||
/* Updated: 2024/11/07 19:07:25 by mc ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
// DEBUG remove temp.h
|
||||
|
||||
#ifndef TEMP_H
|
||||
# define TEMP_H
|
||||
|
||||
# include "include.h"
|
||||
|
||||
# include "utils.h"
|
||||
|
||||
# define TEX_WIDTH 64
|
||||
# define TEX_HEIGHT 64
|
||||
|
||||
typedef struct s_tex
|
||||
{
|
||||
void *textures[4];
|
||||
void *current_tex;
|
||||
int tex_height;
|
||||
int tex_width;
|
||||
int tex_dir;
|
||||
int tex_x;
|
||||
int tex_y;
|
||||
int bpp;
|
||||
int size_line;
|
||||
int endian;
|
||||
} t_tex;
|
||||
|
||||
typedef struct s_ray
|
||||
{
|
||||
// pos player on map (cases)
|
||||
t_point_double dir;
|
||||
bool side;
|
||||
double wallx;
|
||||
} t_ray;
|
||||
|
||||
#endif
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* utils.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/15 16:56:47 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/11/07 19:07:03 by mc ### ########.fr */
|
||||
/* Updated: 2024/11/12 17:01:35 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -61,7 +61,7 @@ void timedloop(void (*f)(void));
|
|||
uint32_t *get_data_addr(void *img_ptr);
|
||||
|
||||
/// @brief Create a vector according to the angle with a specific norm.
|
||||
/// (0 rad returns (0;-1) / pi/2 rad returns (1;0))
|
||||
/// (0 rad is -y / pi/2 rad is +x)
|
||||
///
|
||||
/// @param vec This will be set to the result.
|
||||
/// @param angle Angle to use in radians.
|
||||
|
|
122
src/render.c
122
src/render.c
|
@ -3,21 +3,21 @@
|
|||
/* ::: :::::::: */
|
||||
/* render.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mc <mc@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: Zy <frzysk@proton.me> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/14 14:55:05 by greg #+# #+# */
|
||||
/* Updated: 2024/11/07 19:27:54 by mc ### ########.fr */
|
||||
/* Updated: 2024/11/13 17:53:57 by Zy ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "render.h"
|
||||
#include "render_utils.h"
|
||||
|
||||
static void calculate_perpwalldist3(int x,
|
||||
t_point_double *deltadist,
|
||||
t_ray *ray)
|
||||
// needs ray->x to be defined.
|
||||
static void calculate_dir_and_deltadist(t_ray *ray)
|
||||
{
|
||||
const double ray_direction = 2 * x / (double)SCREEN_WIDTH - 1;
|
||||
const double ray_direction
|
||||
= FOV * 2 * ray->x / (double)SCREEN_WIDTH - FOV;
|
||||
t_point_double plane;
|
||||
t_point_double dir;
|
||||
|
||||
|
@ -25,129 +25,111 @@ static void calculate_perpwalldist3(int x,
|
|||
vector_from_rotation(&plane, g_map.player.rot + PI / 2, 1);
|
||||
ray->dir.x = dir.x + plane.x * ray_direction;
|
||||
ray->dir.y = dir.y + plane.y * ray_direction;
|
||||
deltadist->x = 1e30;
|
||||
ray->deltadist.x = 1e30;
|
||||
if (ray->dir.x != 0)
|
||||
deltadist->x = fabs(1 / ray->dir.x);
|
||||
deltadist->y = 1e30;
|
||||
ray->deltadist.x = fabs(1 / ray->dir.x);
|
||||
ray->deltadist.y = 1e30;
|
||||
if (ray->dir.y != 0)
|
||||
deltadist->y = fabs(1 / ray->dir.y);
|
||||
ray->deltadist.y = fabs(1 / ray->dir.y);
|
||||
}
|
||||
|
||||
static void calculate_perpwalldist2(int x,
|
||||
t_point_double *sidedist,
|
||||
t_point_double *deltadist,
|
||||
t_point_int *step,
|
||||
t_ray *ray)
|
||||
// needs ray->x to be defined.
|
||||
// also defines ->dir and ->deltadist.
|
||||
static void calculate_step_and_sidedist(t_ray *ray)
|
||||
{
|
||||
const int map_x = (int)g_map.player.pos.x;
|
||||
const int map_y = (int)g_map.player.pos.y;
|
||||
|
||||
calculate_perpwalldist3(x, deltadist, ray);
|
||||
calculate_dir_and_deltadist(ray);
|
||||
if (ray->dir.x < 0)
|
||||
{
|
||||
step->x = -1;
|
||||
sidedist->x = (g_map.player.pos.x - map_x) * deltadist->x;
|
||||
ray->step.x = -1;
|
||||
ray->sidedist.x = (g_map.player.pos.x - map_x) * ray->deltadist.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
step->x = 1;
|
||||
sidedist->x = (map_x + 1.0 - g_map.player.pos.x) * deltadist->x;
|
||||
ray->step.x = +1;
|
||||
ray->sidedist.x = (map_x + 1.0 - g_map.player.pos.x) * ray->deltadist.x;
|
||||
}
|
||||
if (ray->dir.y < 0)
|
||||
{
|
||||
step->y = -1;
|
||||
sidedist->y = (g_map.player.pos.y - map_y) * deltadist->y;
|
||||
ray->step.y = -1;
|
||||
ray->sidedist.y = (g_map.player.pos.y - map_y) * ray->deltadist.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
step->y = 1;
|
||||
sidedist->y = (map_y + 1.0 - g_map.player.pos.y) * deltadist->y;
|
||||
ray->step.y = +1;
|
||||
ray->sidedist.y = (map_y + 1.0 - g_map.player.pos.y) * ray->deltadist.y;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief Calculate the distance of the wall perpendicularly to the camera
|
||||
/// plane.
|
||||
///
|
||||
/// @param x Ray direction x between 0 and 1.
|
||||
/// @return Result.
|
||||
static double calculate_perpwalldist(int x, t_ray *ray)
|
||||
// needs ray->x to be defined.
|
||||
// also defines ->dir, ->deltadist, ->step and ->sidedist.
|
||||
static void calculate_side_and_perpwalldist(t_ray *ray)
|
||||
{
|
||||
t_point_int map_pos;
|
||||
t_point_double sidedist;
|
||||
t_point_double deltadist;
|
||||
t_point_int step;
|
||||
|
||||
map_pos.x = (int)g_map.player.pos.x;
|
||||
map_pos.y = (int)g_map.player.pos.y;
|
||||
calculate_perpwalldist2(x, &sidedist, &deltadist, &step, ray);
|
||||
calculate_step_and_sidedist(ray);
|
||||
while (map_get_case(&g_map, map_pos.x, map_pos.y)->wall == EMPTY)
|
||||
{
|
||||
if (sidedist.x < sidedist.y)
|
||||
if (ray->sidedist.x < ray->sidedist.y)
|
||||
{
|
||||
sidedist.x += deltadist.x;
|
||||
map_pos.x += step.x;
|
||||
ray->sidedist.x += ray->deltadist.x;
|
||||
map_pos.x += ray->step.x;
|
||||
ray->side = false;
|
||||
continue ;
|
||||
}
|
||||
sidedist.y += deltadist.y;
|
||||
map_pos.y += step.y;
|
||||
ray->sidedist.y += ray->deltadist.y;
|
||||
map_pos.y += ray->step.y;
|
||||
ray->side = true;
|
||||
}
|
||||
if (!ray->side)
|
||||
return (sidedist.x - deltadist.x);
|
||||
return (sidedist.y - deltadist.y);
|
||||
ray->perpwalldist = ray->sidedist.x - ray->deltadist.x;
|
||||
else
|
||||
ray->perpwalldist = ray->sidedist.y - ray->deltadist.y;
|
||||
}
|
||||
|
||||
/// @brief Draw a vertical line according to the ray direction x.
|
||||
///
|
||||
/// @param x Ray direction x between 0 and 1.
|
||||
static void draw_vertical_line(int x, u_int32_t *img_data,
|
||||
t_ray *ray, t_tex *tex)
|
||||
static void draw_vertical_line(u_int32_t *img_data, t_ray *ray)
|
||||
{
|
||||
const double perpwalldist = calculate_perpwalldist(x, ray);
|
||||
const int line_height = (int)(SCREEN_HEIGHT / perpwalldist);
|
||||
int draw_start;
|
||||
int draw_end;
|
||||
int y;
|
||||
int line_height;
|
||||
int draw_start;
|
||||
int draw_end;
|
||||
|
||||
ft_init_texture(perpwalldist, ray, tex);
|
||||
calculate_side_and_perpwalldist(ray);
|
||||
calculate_texdir_and_wallx(ray);
|
||||
line_height = (int)(SCREEN_WIDTH / FOV / 2 / ray->perpwalldist);
|
||||
draw_start = -line_height / 2 + SCREEN_HEIGHT / 2;
|
||||
if (draw_start < 0)
|
||||
draw_start = 0;
|
||||
draw_end = line_height / 2 + SCREEN_HEIGHT / 2;
|
||||
if (draw_end >= SCREEN_HEIGHT)
|
||||
draw_end = SCREEN_HEIGHT - 1;
|
||||
y = 0;
|
||||
while (y++ < SCREEN_HEIGHT)
|
||||
ray->y = 0;
|
||||
while (ray->y++ < SCREEN_HEIGHT)
|
||||
{
|
||||
if (y < draw_start)
|
||||
img_data[y * SCREEN_WIDTH + x] = g_map.color_ceiling;
|
||||
else if (y < draw_end)
|
||||
{
|
||||
draw_wall(tex, ray, line_height, x, y, img_data);
|
||||
}
|
||||
if (ray->y < draw_start)
|
||||
img_data[ray->y * SCREEN_WIDTH + ray->x] = g_map.color_ceiling;
|
||||
else if (ray->y < draw_end)
|
||||
draw_wall(ray, line_height, img_data);
|
||||
else
|
||||
img_data[y * SCREEN_WIDTH + x] = g_map.color_floor;
|
||||
img_data[ray->y * SCREEN_WIDTH + ray->x] = g_map.color_floor;
|
||||
}
|
||||
}
|
||||
|
||||
int render(u_int32_t *img_data)
|
||||
{
|
||||
int x;
|
||||
t_ray ray;
|
||||
t_tex tex;
|
||||
|
||||
tex.tex_width = 64; // TODO fix
|
||||
tex.tex_height = 64; // TODO fix
|
||||
tex.textures[NORTH] = g_map.textures[NORTH].image;
|
||||
tex.textures[SOUTH] = g_map.textures[SOUTH].image;
|
||||
tex.textures[WEST] = g_map.textures[WEST].image;
|
||||
tex.textures[EAST] = g_map.textures[EAST].image;
|
||||
x = 0;
|
||||
while (x < SCREEN_WIDTH)
|
||||
ray.x = 0;
|
||||
while (ray.x < SCREEN_WIDTH)
|
||||
{
|
||||
draw_vertical_line(x, img_data, &ray, &tex);
|
||||
x++;
|
||||
draw_vertical_line(img_data, &ray);
|
||||
ray.x++;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* render_utils.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: Zy <frzysk@proton.me> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/24 14:26:22 by grobledo #+# #+# */
|
||||
/* Updated: 2024/11/04 14:00:25 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/11/13 18:11:14 by Zy ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -15,42 +15,39 @@
|
|||
#include "const.h"
|
||||
#include "global.h"
|
||||
|
||||
void ft_init_texture(const double perpwalldist, t_ray *ray, t_tex *tex)
|
||||
void calculate_texdir_and_wallx(t_ray *ray)
|
||||
{
|
||||
if (ray->side == 0 && ray->dir.x < 0)
|
||||
tex->tex_dir = 0;
|
||||
if (ray->side == 0 && ray->dir.x >= 0)
|
||||
tex->tex_dir = 1;
|
||||
if (ray->side == 1 && ray->dir.y < 0)
|
||||
tex->tex_dir = 2;
|
||||
if (ray->side == 1 && ray->dir.y >= 0)
|
||||
tex->tex_dir = 3;
|
||||
if (ray->side == 0)
|
||||
ray->wallx = g_map.player.pos.y + perpwalldist \
|
||||
if (ray->side && ray->dir.y < 0)
|
||||
ray->texdir = NORTH;
|
||||
if (ray->side && ray->dir.y >= 0)
|
||||
ray->texdir = SOUTH;
|
||||
if (!ray->side && ray->dir.x < 0)
|
||||
ray->texdir = EAST;
|
||||
if (!ray->side && ray->dir.x >= 0)
|
||||
ray->texdir = WEST;
|
||||
if (!ray->side)
|
||||
ray->wallx = g_map.player.pos.y + ray->perpwalldist \
|
||||
* ray->dir.y;
|
||||
else
|
||||
ray->wallx = g_map.player.pos.x + perpwalldist \
|
||||
ray->wallx = g_map.player.pos.x + ray->perpwalldist \
|
||||
* ray->dir.x;
|
||||
if (ray->texdir == SOUTH || ray->texdir == EAST)
|
||||
ray->wallx = -ray->wallx;
|
||||
ray->wallx -= floor((ray->wallx));
|
||||
}
|
||||
|
||||
void draw_wall(t_tex *tex, t_ray *ray, const int line_height, int x,
|
||||
int y, u_int32_t *img_data)
|
||||
void draw_wall(t_ray *ray, const int line_height, u_int32_t *img_data)
|
||||
{
|
||||
u_int32_t color;
|
||||
u_int32_t *texture_data;
|
||||
int texx;
|
||||
int texy;
|
||||
u_int32_t color;
|
||||
u_int32_t *texture_data;
|
||||
int texx;
|
||||
int texy;
|
||||
const t_texture texture = g_map.textures[ray->texdir];
|
||||
|
||||
texy = ((y - (-line_height / 2 + SCREEN_HEIGHT / 2)) \
|
||||
* tex->tex_height) / line_height;
|
||||
texx = (int)(ray->wallx * (double)tex->tex_width);
|
||||
if (ray->side == 0 && ray->dir.x > 0)
|
||||
texx = tex->tex_width - texx - 1;
|
||||
if (ray->side == 1 && ray->dir.y < 0)
|
||||
texx = tex->tex_height - texx - 1;
|
||||
texture_data = (u_int32_t *)mlx_get_data_addr(tex->textures[tex->tex_dir],
|
||||
&tex->bpp, &tex->size_line, &tex->endian);
|
||||
color = texture_data[texx * tex->tex_width + texy];
|
||||
img_data[y * SCREEN_WIDTH + x] = color;
|
||||
texy = ((ray->y - (-line_height / 2 + SCREEN_HEIGHT / 2))
|
||||
* texture.height) / line_height;
|
||||
texx = (int)(ray->wallx * (double)texture.width);
|
||||
texture_data = get_data_addr(texture.image);
|
||||
color = texture_data[texy * texture.width + texx];
|
||||
img_data[ray->y * SCREEN_WIDTH + ray->x] = color;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <mcolonna@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/24 14:26:22 by grobledo #+# #+# */
|
||||
/* Updated: 2024/11/04 13:07:42 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/11/12 17:38:08 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -15,9 +15,39 @@
|
|||
|
||||
# include "render.h"
|
||||
|
||||
void ft_init_texture(const double perpwalldist, t_ray *ray, t_tex *tex);
|
||||
typedef struct s_ray
|
||||
{
|
||||
// Column of pixels currently drawing.
|
||||
// Define the angle of the projected ray.
|
||||
int x;
|
||||
// With x, pixel to draw.
|
||||
int y;
|
||||
// Let the plane 1 case in front of the camera, of size FOV:
|
||||
// point at which the ray projected touches the plane, relative to
|
||||
// the camera position.
|
||||
t_point_double dir;
|
||||
// Transversal distance between two cases horizontally (for x) /
|
||||
// vertically (for y), following the ray angle.
|
||||
t_point_double deltadist;
|
||||
// Direction of the ray, each component is either -1 or +1.
|
||||
t_point_int step;
|
||||
// Iterating perpwalldist for both north/south walls and east/west walls.
|
||||
t_point_double sidedist;
|
||||
// If true, the texture touched by the ray is facing north or south.
|
||||
bool side;
|
||||
// Distance between the wall touched by the ray and the camera plane.
|
||||
double perpwalldist;
|
||||
// x position of the point at which the ray touches the wall
|
||||
// on the wall texture.
|
||||
// Is in [0, 1[: 0 is the left side, 1 is the right side.
|
||||
double wallx;
|
||||
// Direction of the wall that the ray touches.
|
||||
t_direction texdir;
|
||||
} t_ray;
|
||||
|
||||
void draw_wall(t_tex *tex, t_ray *ray, const int line_height, int x,
|
||||
int y, u_int32_t *img_data);
|
||||
// needs ray->x, ->side and ->dir to be defined.
|
||||
void calculate_texdir_and_wallx(t_ray *ray);
|
||||
|
||||
void draw_wall(t_ray *ray, const int line_height, u_int32_t *img_data);
|
||||
|
||||
#endif
|
||||
|
|
13
testmaps/good_directions_test.cub
Normal file
13
testmaps/good_directions_test.cub
Normal file
|
@ -0,0 +1,13 @@
|
|||
F 255,127,0
|
||||
C 0,2,67
|
||||
EA textures/test/east.xpm
|
||||
NO textures/test/north.xpm
|
||||
SO textures/test/south.xpm
|
||||
WE textures/test/west.xpm
|
||||
111
|
||||
111110111
|
||||
10000N001
|
||||
111110111
|
||||
101
|
||||
101
|
||||
111
|
89
textures/test/east.xpm
Normal file
89
textures/test/east.xpm
Normal file
|
@ -0,0 +1,89 @@
|
|||
/* XPM */
|
||||
static char *east[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"79 80 3 1 ",
|
||||
" c #FFB600",
|
||||
". c #FFD000",
|
||||
"X c white",
|
||||
/* pixels */
|
||||
"......................................... ",
|
||||
"......................................... ",
|
||||
"......................................... ",
|
||||
"........................................ ",
|
||||
"........................................ ",
|
||||
"...............................XXXXXXXXXXXXXXXXXXXXX ",
|
||||
"..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"....................XXXXXXXXXXXXX....... XXXXXXXXXXXXXXX ",
|
||||
"...............XXXXXXXXXXXX............. XXXXXXXXXXXXXXXXX ",
|
||||
"...........XXXXXXXXXXX.................. XXXXXXXXXX ",
|
||||
".......XXXXXXXXXX....................... XXX ",
|
||||
".......XXXXXX........................... XX ",
|
||||
".......XX............................... XX ",
|
||||
".......XX............................... XX ",
|
||||
"......XXX............................... XXX ",
|
||||
"......XX................................ XXX ",
|
||||
"......XX................................ XX ",
|
||||
"......XX................................ XX ",
|
||||
"......XX................................ XX ",
|
||||
"......XX................................ XX ",
|
||||
"......XX................................ XX ",
|
||||
"......XX................................ XXX ",
|
||||
"......XX............................... XX ",
|
||||
"......XX............................... XX ",
|
||||
".....XXX............................... XX ",
|
||||
".....XXX....................XXXX....... XXXXXXXXX XXXXX XX ",
|
||||
".....XX.......XXXXXXXXXXX..XXXXXX......XXXXXXXXXXX XXXXXXXX XX ",
|
||||
".....XX......XXXXXXXXXXXX.XXXXXXXX....XXXXX XXXXXXXX XX ",
|
||||
".....XX......XXX..........XXX..XXXX...XXX XXXXXXXX XX ",
|
||||
".....XX......XX...........XX.....XXX..XX XXXXXXXXXX XX ",
|
||||
".....XX......XX..........XXX.....XXX..XXX XXXXX XX XX ",
|
||||
".....XX......XX..........XX.......XX..XXX XX XX ",
|
||||
".....XX......XX..........XX.......XXX..XX XX XX ",
|
||||
".....XX......XX..........XX.......XXX..XXX XX XX ",
|
||||
".....XX......XX.........XXX........XX..XXXX XX XX ",
|
||||
".....XX......XXXXXXXX...XXX........XX.. XXXX XX XX ",
|
||||
".....XX......XXXXXXXX...XX.........XX.. XXXX XX XX ",
|
||||
"....XXX......XX.........XX.........XX.. XXX XX XX ",
|
||||
"....XXX......XX........XXXXXXXXXXXXXX.. XXX XX XX ",
|
||||
"....XX.......XX........XXXXXXXXXXXXXX.. XXXX XX XX ",
|
||||
"....XX.......XX........XX..........XX.. XXX XXX XX ",
|
||||
"....XX.......XX........XX..........XX.. XXX XX XX ",
|
||||
"....XX.......XX........XX..........XX.. XXXX XX XX ",
|
||||
"....XX.......XX........XX..........XX.. XXX XX XX ",
|
||||
"....XX.......XX........XX..........XX.. XX XX XX ",
|
||||
"....XX.......XX........XX..........XX. XX XX XX ",
|
||||
"....XX.......XX........XX..........XX. XX XXX XX ",
|
||||
"....XX.......XX........XX..........XX. XX XXX XX ",
|
||||
"....XX.......XX........XX..........XX. XXX XX XXX ",
|
||||
"....XX.......XX........XX..........XX. XXXX XX XXX ",
|
||||
"....XX.......XX........XX..........XX. XXXX XX XX ",
|
||||
"....XX......XXXXXXXX...XX..........XX. XXXXXXXX XX XX ",
|
||||
"....XX......XXXXXXXX...XX..........XX. XXXXXXX XX ",
|
||||
"....XX................................ XX ",
|
||||
"....XX................................ XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XXX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XX ",
|
||||
"....XX............................... XXX ",
|
||||
".....XXX............................. XXXX ",
|
||||
".....XXXXXXX......................... XXXXX ",
|
||||
"......XXXXXXXXXXXXXXXXX.............. XXXXXXXXXXXXXXXX ",
|
||||
"..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
".....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... ",
|
||||
".................................... "
|
||||
};
|
99
textures/test/north.xpm
Normal file
99
textures/test/north.xpm
Normal file
|
@ -0,0 +1,99 @@
|
|||
/* XPM */
|
||||
static char *north[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"127 90 3 1 ",
|
||||
" c #003BFF",
|
||||
". c #006AFF",
|
||||
"X c white",
|
||||
/* pixels */
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... XXXXXXXXXXXXX ",
|
||||
"....XX.....................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"....XXX........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.. XXXXXXXXXXXXXX ",
|
||||
"....XXXXXXXXXXXXX............................................. XXXXXXXXXXXX ",
|
||||
"....XX........................................................ XXXXXXXX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XXX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XX........................................................ XX ",
|
||||
"....XXX....................................................... XXX ",
|
||||
"....XXX....................................................... XXX ",
|
||||
".....XX...................................................... XX ",
|
||||
".....XX...................................................... XX ",
|
||||
".....XX...................................................... XX ",
|
||||
".....XX...................................................... XX ",
|
||||
".....XX...................................................... XXX ",
|
||||
".....XX...................................................... XXX ",
|
||||
".....XX...................................................... XX ",
|
||||
".....XX.....................................XXXX............. XX ",
|
||||
".....XX...........................XX.......XXXXXX.......XXXXXX XX ",
|
||||
".....XX...................XX......XX......XXXXXXX...XXXXXXXXXXXX XXXXXX XXX XX XXX ",
|
||||
".....XX...................XXX.....XX.....XXXXX.XXX..XXXXXX.. XXXX XXXXXXXXXXXXXX XX XX XXX ",
|
||||
".....XX...................XXXX....XXX...XXXXXX..XX....XXX... XXX XXXXXXXXXXXX XX XX XX ",
|
||||
".....XX...................XXXX....XXX...XXX.....XX.....XX... XX XX XX XX XX ",
|
||||
".....XX...................XXXXX....XX...XX......XX.....XX... XX XX XX XX XX ",
|
||||
".....XX...................XX.XXX...XX..XXX......XXX...XXX... XX XX XX XX XX ",
|
||||
".....XX...................XX.XXX...XX..XXX.......XX...XXX... XXX XX XXXXXXXX XX XX ",
|
||||
".....XX...................XX..XXX..XX..XX........XX...XX.XXXXXXX XX XXXXXXXXXXXX XX ",
|
||||
".....XX...................XX..XXX..XX..XX........XX...XX.XXXXXXX XXX XX XXXXXX XX ",
|
||||
".....XX...................XX...XXX.XX..XX.......XXX...XX...XXXX XXX XX XXX XX ",
|
||||
".....XX...................XX...XXX.XX..XXX......XXX...XX....XXXX XX XX XXX XX ",
|
||||
".....XX...................XXX...XXXXX...XX.....XXX....XX... XXXX XXX XX XX XXX ",
|
||||
".....XX...................XXX...XXXXX...XXX...XXXX....XX... XXX XXX XX XX XXX ",
|
||||
".....XX....................XX....XXXX...XXXXXXXXX.....XX... XX XX XX XX ",
|
||||
".....XX....................XX....XXXX....XXXXXXX......XX... XX XX ",
|
||||
".....XX.................................................... XX ",
|
||||
".....XX.................................................... XX ",
|
||||
".....XX.................................................... XX ",
|
||||
".....XX.................................................... XX ",
|
||||
".....XX.................................................... XX ",
|
||||
".....XX................................................... XX ",
|
||||
".....XX................................................... XX ",
|
||||
".....XXX.................................................. XX ",
|
||||
".....XXX.................................................. XX ",
|
||||
"......XX.................................................. XX ",
|
||||
"......XX.................................................. XX ",
|
||||
"......XX.................................................. XX ",
|
||||
"......XX.................................................. XX ",
|
||||
"......XXXX............................................... XX ",
|
||||
"......XXXX............................................... XX ",
|
||||
"......XXXX............................................... XXX ",
|
||||
"......XXXX............................................... XXX ",
|
||||
"......XXXX............................................... XX ",
|
||||
".......XXX............................................... XX ",
|
||||
".......XX................................................ XX ",
|
||||
".......XX................................................ XX ",
|
||||
".......XX................................................ XX ",
|
||||
".......XX............................................... XX ",
|
||||
".......XXX.............................................. XX ",
|
||||
".......XXX.............................................. XX ",
|
||||
"........XX.............................................. XX ",
|
||||
"........XX.............................................. XX ",
|
||||
"........XX.............................................. XX ",
|
||||
"........XX.............................................. XX ",
|
||||
"........XXXX............................................ XX ",
|
||||
"........XXXXXXXX........................................ XX ",
|
||||
"..........XXXXXXXXX..................................... XX ",
|
||||
"...............XXXXXX................................... XX ",
|
||||
".................XXXXXXX................................ XXXXXXX ",
|
||||
"...................XXXXXXXXX............................ XXXXXXXXXXXXX ",
|
||||
"......................XXXXXXXXXXX....................... XXXXXXXXXXXXXXX ",
|
||||
"..........................XXXXXXXXXXXXXX................ XXXXXXXXXXXXXXXXXXX ",
|
||||
"...............................XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"......................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"........................................................XXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ "
|
||||
};
|
88
textures/test/south.xpm
Normal file
88
textures/test/south.xpm
Normal file
|
@ -0,0 +1,88 @@
|
|||
/* XPM */
|
||||
static char *south[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"121 79 3 1 ",
|
||||
" c #DD0E00",
|
||||
". c #FF3B00",
|
||||
"X c white",
|
||||
/* pixels */
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
"............................................................... ",
|
||||
".................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
|
||||
"..........XXXX.......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"..........XXXXXXXXXXXXXXXXXXXXXXXXX.........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"..........XXXXXXXXXXXX......................................... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"..........XXX.................................................. XXXXXXXXXXXXXXXXXXXX ",
|
||||
"..........XXX.................................................. XXXXXXXXXXX ",
|
||||
"...........XX.................................................. XXX ",
|
||||
"...........XX.................................................. XX ",
|
||||
"..........XXX.................................................. XX ",
|
||||
"..........XXX.................................................. XX ",
|
||||
"..........XX................................................... XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX.................................................. XX ",
|
||||
"..........XX..................XXXX............................ XX ",
|
||||
".........XXX................XXXXXXX....................XX..... XX XX ",
|
||||
".........XXX..............XXXXXX.XX......XX..XX........XX..... XX XX XX XX ",
|
||||
".........XX...............XXXX..........XXX..XXXX......XX..... XX XXXXXXXX XX XX XX ",
|
||||
".........XX..............XXX...........XXXX..XXXXX.....XX..... XX XXXXXXXXXXXXXX XX XX XX ",
|
||||
".........XX..............XXX...........XXX.....XXXX....XX..... XXX XXXXXXXXX XX XX XX ",
|
||||
".........XX..............XX...........XXX.......XXXX...XX..... XXX XXXXX XX XX XX ",
|
||||
".........XX..............XX...........XXX.........XXX.XXX..... XX XXXX XXX XX XX ",
|
||||
".........XX..............XXX..........XX...........XX.XX...... XX XXX XXX XX XX ",
|
||||
".........XX..............XXXX........XXX...........XXXXX...... XX XXX XX XX XX ",
|
||||
".........XX...............XXXXX......XX.............XXXX...... XX XX XX XXXX XX ",
|
||||
".........XX................XXXXX.....XX.............XXXX...... XX XXX XXXXXXXXXXXXXX XX ",
|
||||
".........XX..................XXXXX...XX.............XXXX...... XX XXX XXXXXXXXXXXXX XX ",
|
||||
".........XX....................XXXX..XX.............XXXX...... XX XX XX XX XX ",
|
||||
".........XX.....................XXXX.XX.............XXXX...... XXX XX XX XX XX ",
|
||||
".........XX......................XXX.XX.............XXXXX..... XXX XX XX XX XX ",
|
||||
".........XX.......................XX.XX.............XXXXX..... XX XX XX XX XX ",
|
||||
".........XX.......................XX.XX............XXX.XXX....XXX XX XXX XX XX ",
|
||||
".........XX.......................XX.XXX...........XX..XXX...XXXX XX XXX XX XX ",
|
||||
".........XX.....................XXXX.XXX..........XXX...XXXXXXXX XX XX XXX XX ",
|
||||
".........XX....................XXXX...XXX.........XXX....XXXXXX XX XX XXX XX ",
|
||||
".........XX..................XXXXX....XXXX.......XXX......XXXX XX XX ",
|
||||
".........XX.............XXXXXXXXX......XXXX.....XXXX.......... XX XX ",
|
||||
".........XX.............XXXXXXX.........XXXXXXXXXXX........... XX XX ",
|
||||
".........XX..............................XXXXXXXX............. XX ",
|
||||
".........XX................................................... XXX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XX ",
|
||||
".........XX................................................... XXX ",
|
||||
".........XX................................................... XXX ",
|
||||
".......XXXX....................XXXXXXXX....................... XX ",
|
||||
".......XXXX...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX ",
|
||||
".......XXXXXXXXXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX ",
|
||||
"........XXXXXXXX............................................. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX ",
|
||||
"............................................................. XXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"............................................................. XXXXXXX ",
|
||||
"............................................................. ",
|
||||
"............................................................. ",
|
||||
"............................................................. ",
|
||||
"............................................................. ",
|
||||
"............................................................. "
|
||||
};
|
73
textures/test/west.xpm
Normal file
73
textures/test/west.xpm
Normal file
|
@ -0,0 +1,73 @@
|
|||
/* XPM */
|
||||
static char *west[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"117 64 3 1 ",
|
||||
" c #38E200",
|
||||
". c #3CF300",
|
||||
"X c white",
|
||||
/* pixels */
|
||||
"...................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"....................................................... ",
|
||||
"............XXXX....................................... ",
|
||||
"............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......... XXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"............XX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"............XX.............................XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XXX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX..............XXX.............XX.....XXXXXX XXXXXXX XXXXXX XX ",
|
||||
"............XX..............XXX....XX.......XX...XXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XX ",
|
||||
"............XX..............XX.....XXX......XX..XXXX... XXXX XXXXXXX XXXXXX XX ",
|
||||
"............XX..............XX.....XXX......XXX.XXX.... XX XXX XX XXX XX ",
|
||||
"............XX..............XX.....XXX......XXX.XX..... XXXX XXX XX ",
|
||||
"............XX..............XX.....XXX.......XX.XXX.... XXXXX XX XX ",
|
||||
"............XX..............XX......XX......XXX..XXXX.. XXXXX XX XX ",
|
||||
"............XX..............XX......XX......XXX..XXXXXXXXX XXXXX XXX XX ",
|
||||
"............XX..............XX.....XXX......XX...XXXXXXXXX XXXX XX XX ",
|
||||
"............XX..............XXX....XXXX....XXX..XXX.... XXX XXX XX ",
|
||||
"............XX..............XXXX..XXXXXX..XXXX..XX..... XXX XXX XX ",
|
||||
"............XX...............XXXXXXXXXXXXXXXX...XX..... XX XXX XX XX ",
|
||||
"............XX................XXXXXX..XXXXXX....XXX...XXXXX XXXXXXXXXXX XX XX ",
|
||||
"............XX..................XXX....XXXX.....XXXXXXXXXXX XXXXXXXXX XX XX ",
|
||||
"............XX....................................XXXXXX XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX......................................... XX ",
|
||||
"............XX.......................................... XX ",
|
||||
"............XXX......................................... XX ",
|
||||
"............XXX......................................... XX ",
|
||||
".............XX......................................... XX ",
|
||||
".............XX......................................... XX ",
|
||||
".............XX......................................... XX ",
|
||||
".............XX......................................... XX ",
|
||||
".............XX......................................... XXX ",
|
||||
".............XX..................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
".............XXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
|
||||
".............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..... ",
|
||||
".................XXXXXX................................. ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ ",
|
||||
"........................................................ "
|
||||
};
|
Loading…
Add table
Reference in a new issue