LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_terrain.h
1/*
2 * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2026
3 * All rights reserved
4 */
5
6#ifndef LG_TERRAIN_H
7#define LG_TERRAIN_H
8
9#define HEIGHTMAP_MAX_W 1024
10#define HEIGHTMAP_MAX_H 1024
11
12#define HEIGHTMAP_MIN_W 8
13#define HEIGHTMAP_MIN_H 8
14
15#define TERRAIN_BBOX_COLOR "cyan"
16
17typedef enum {
18 RANDOM_NOISE,
19 PERLIN_NOISE,
20 OPENSIMPLEX2_NOISE,
21 CELLULAR_NOISE /* = VORONOI_NOISE */
22 /*
23 OPENSIMPLEX2S_NOISE
24 VALUE_CUBIC_NOISE
25 VALUE_NOISE
26 */
27} lg_noise_type;
28
29#define NORTH_BORDER 1
30#define SOUTH_BORDER 2
31#define WEST_BORDER 4
32#define EAST_BORDER 8
33
34/* Horizontally-centered and normalized */
35typedef struct {
36 Vertex_uv_n *vbo_data; /* VBO (with interleaved vertex data) - sizeof(Vertex_uv_n) = 24 */
37 uint32_t *ibo_data; /* IBO (indices start at 0) - sizeof(uint32_t) = 4 */
38 uint32_t vbo_size;
39 uint32_t ibo_size;
40 uint32_t n_vertices;
41 uint32_t n_faces;
42 uint32_t n_indices; /* Needed ? Always = n_faces * 3 */
43 LG_Texture *tex;
44 uint16_t elevation[HEIGHTMAP_MAX_W * HEIGHTMAP_MAX_H]; /* heightmap * 65535 * vert_scaling_k */
45 uint16_t grid_w;
46 uint16_t grid_h;
48
49LG_Terrain *lg_terrain_new(uint16_t, uint16_t, float, int, int, float, LG_Texture *);
50
51LG_Terrain *lg_terrain_new_from_heightmap(float *, uint16_t, uint16_t, float, LG_Texture *);
52
53float lg_terrain_get_elevation(LG_Terrain *, float, float, uint16_t, uint16_t);
54
56
57float lg_get_elevation_from_array(uint16_t *, float, float, uint16_t, uint16_t);
58
60
61float *lg_heightmap_generate(uint16_t, uint16_t, int, int, float);
62
63void lg_heightmaps_add(float *, float *, uint16_t, uint16_t, float);
64
65void lg_heightmap_flatten_border(float *, uint16_t, uint16_t, uint16_t, int);
66
67void lg_heightmap_apply_func(float *, uint16_t, uint16_t, float (*)(uint16_t, uint16_t, float));
68
69LG_Mesh *lg_terrain_to_mesh(LG_Terrain *, const char *);
70
71Vertex_rgba *lg_horiz_grid(uint16_t, int *, float, LG_Color_u);
72
73// DEPRECATED
74const Vertex *lg_horiz_grid0();
75
76const unsigned short *lg_horiz_grid0_indices();
77
79
81
82#endif /* LG_TERRAIN_H */
void lg_heightmap_flatten_border(float *heightmap, uint16_t w, uint16_t h, uint16_t k, int border)
Definition lg_terrain.c:504
LG_Mesh * lg_terrain_to_mesh(LG_Terrain *terrain, const char *name)
Definition lg_terrain.c:578
void lg_heightmaps_add(float *heightmap1, float *heightmap2, uint16_t w, uint16_t h, float k)
Definition lg_terrain.c:479
LG_Terrain * lg_terrain_new_from_heightmap(float *heightmap, uint16_t width, uint16_t height, float norm_max_height, LG_Texture *tex)
Definition lg_terrain.c:149
Vertex_rgba * lg_horiz_grid(uint16_t grid_width, int *n_vertices, float scaling, LG_Color_u c)
Definition lg_terrain.c:741
void lg_heightmap_apply_func(float *heightmap, uint16_t w, uint16_t h, float(*func)(uint16_t, uint16_t, float))
Definition lg_terrain.c:555
float * lg_heightmap_generate(uint16_t width, uint16_t height, int noise_type, int seed, float frequency)
Definition lg_terrain.c:429
size_t lg_sizeof_horiz_grid0()
Definition lg_terrain.c:872
const Vertex * lg_horiz_grid0()
Definition lg_terrain.c:847
const unsigned short * lg_horiz_grid0_indices()
Definition lg_terrain.c:864
float lg_terrain_get_elevation(LG_Terrain *terrain, float x, float y, uint16_t w, uint16_t h)
Definition lg_terrain.c:326
LG_Terrain * lg_terrain_new(uint16_t width, uint16_t height, float norm_max_height, int noise_type, int seed, float frequency, LG_Texture *tex)
Definition lg_terrain.c:119
void lg_terrain_free(LG_Terrain *terrain)
Definition lg_terrain.c:394
size_t lg_sizeof_horiz_grid0_indices()
Definition lg_terrain.c:880
void lg_get_elevation_array_from_terrain(uint16_t *elevation, LG_Terrain *terrain)
Definition lg_terrain.c:337
float lg_get_elevation_from_array(uint16_t *elevation, float x, float y, uint16_t w, uint16_t h)
Definition lg_terrain.c:362
Definition lg_vertex.h:111
Definition lg_mesh.h:84
Definition lg_terrain.h:35
Definition lg_textures.h:45
Definition lg_vertex.h:80
Definition lg_vertex.h:46
Definition lg_vertex.h:16