A working flyover (fast)
This commit is contained in:
parent
96cc0a246c
commit
300bdb3e31
81
terrain.c
81
terrain.c
@ -4,6 +4,7 @@
|
|||||||
#include "haloo3d/haloo3dex_obj.h"
|
#include "haloo3d/haloo3dex_obj.h"
|
||||||
|
|
||||||
#include "haloo3d/haloo3dex_print.h"
|
#include "haloo3d/haloo3dex_print.h"
|
||||||
|
#include "haloo3d/lib/FastNoiseLite.h"
|
||||||
#include "haloo3d/lib/mathc.h"
|
#include "haloo3d/lib/mathc.h"
|
||||||
#include "unigi/main.h"
|
#include "unigi/main.h"
|
||||||
|
|
||||||
@ -25,28 +26,35 @@
|
|||||||
// Lookvec for objects which all face forward along with the player
|
// Lookvec for objects which all face forward along with the player
|
||||||
#define DEFAULTLOOK \
|
#define DEFAULTLOOK \
|
||||||
{ .x = 0, .y = 0, .z = -1 }
|
{ .x = 0, .y = 0, .z = -1 }
|
||||||
// { .x = 1.0, .y = 1.0, .z = 1.0 }
|
|
||||||
// How big each chunk is (x and y, square). MUST BE POWER OF 2 - 1
|
// How big each chunk is (x and y, square). MUST BE POWER OF 2 - 1
|
||||||
#define CHUNKSIZE 7
|
#define CHUNKSIZE 7 // This is the width in tiles
|
||||||
#define CHUNKSCALE 1.0 / CHUNKSIZE
|
#define CHUNKSCALE 1.0 / CHUNKSIZE
|
||||||
|
// This is how many vertices across a chunk is
|
||||||
|
#define CHUNKVSIZE (CHUNKSIZE + 1)
|
||||||
#define VIEWDISTANCE 10
|
#define VIEWDISTANCE 10
|
||||||
#define PLBOXEDGE (VIEWDISTANCE * 2 + 1)
|
#define PLBOXEDGE (VIEWDISTANCE * 2 + 1)
|
||||||
#define MAXCHUNKPERFRAME 1
|
|
||||||
|
|
||||||
// These are initial values but there may be ways to change it
|
|
||||||
#define INIT_CAMPITCH MPI_2 // MPI_2 * 1.6 // 1.575
|
|
||||||
#define INIT_NEARCLIP 0.01
|
#define INIT_NEARCLIP 0.01
|
||||||
#define INIT_FARCLIP 100.0
|
#define INIT_FARCLIP 100.0
|
||||||
#define INIT_FOV 90.0
|
|
||||||
#define INIT_DITHERSTART 100
|
|
||||||
#define INIT_DITHEREND 100
|
|
||||||
#define INIT_LIGHTPITCH MPI_2 * 1.75
|
|
||||||
#define INIT_LIGHTYAW 0
|
|
||||||
#define INIT_MINLIGHT 0.3
|
|
||||||
|
|
||||||
#define INIT_PLAYERHEIGHT 0.5
|
#define MAXCHUNKPERFRAME 1
|
||||||
|
|
||||||
|
// Generation consts / things for looks
|
||||||
|
#define LANDCOL 0xF4E1
|
||||||
|
#define SEACOL 0xF26C
|
||||||
|
#define LANDHEIGHT 4.0
|
||||||
|
#define SKYCOL 0xF77F
|
||||||
|
#define INIT_LIGHTPITCH MPI_2 * 1.65
|
||||||
|
#define INIT_LIGHTYAW MPI_2 * 0.65
|
||||||
|
#define INIT_MINLIGHT 0.2
|
||||||
|
#define INIT_DITHERSTART 3
|
||||||
|
#define INIT_DITHEREND 10
|
||||||
|
|
||||||
|
// Player things
|
||||||
|
#define INIT_FOV 90.0
|
||||||
|
#define INIT_CAMPITCH MPI_2 * 1.2 // MPI_2 * 1.6 // 1.575
|
||||||
|
#define INIT_PLAYERHEIGHT 0.65
|
||||||
#define INIT_PLAYERSPEED \
|
#define INIT_PLAYERSPEED \
|
||||||
{ .x = 0, .y = 0, .z = -1.5 }
|
{ .x = 0, .y = 0, .z = -9.5 }
|
||||||
|
|
||||||
#define RANDF() ((float)rand() / RAND_MAX)
|
#define RANDF() ((float)rand() / RAND_MAX)
|
||||||
|
|
||||||
@ -65,27 +73,39 @@ void fastface(haloo3d_facei face, uint16_t tex, uint16_t v0, uint16_t v1,
|
|||||||
face[2].posi = v2;
|
face[2].posi = v2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int gen_terrain_seed = 0;
|
||||||
|
|
||||||
void gen_terrain(struct vec3i pos, haloo3d_obj *model) {
|
void gen_terrain(struct vec3i pos, haloo3d_obj *model) {
|
||||||
eprintf("Generating terrain at %d,%d\n", pos.x, pos.z);
|
eprintf("Generating terrain at %d,%d\n", pos.x, pos.z);
|
||||||
// Don't allow the model to have more than some amount of faces/vertices.
|
// Don't allow the model to have more than some amount of faces/vertices.
|
||||||
haloo3d_obj_resetfixed(model, (CHUNKSIZE + 1) * (CHUNKSIZE + 1) * 4,
|
haloo3d_obj_resetfixed(model, CHUNKVSIZE * CHUNKVSIZE * 4,
|
||||||
(CHUNKSIZE + 1) * (CHUNKSIZE + 1) * 4);
|
CHUNKVSIZE * CHUNKVSIZE * 4);
|
||||||
struct vec3 landcol = haloo3d_gen_paletteuv(0xF2F0);
|
struct vec3 landcol = haloo3d_gen_paletteuv(LANDCOL); // 0xF2C0);
|
||||||
int landuv = haloo3d_obj_addvtexture(model, landcol);
|
int landuv = haloo3d_obj_addvtexture(model, landcol);
|
||||||
for (int z = 0; z <= CHUNKSIZE; z++) {
|
fnl_state ns = fnlCreateState();
|
||||||
for (int x = 0; x <= CHUNKSIZE; x++) {
|
ns.noise_type = FNL_NOISE_OPENSIMPLEX2;
|
||||||
haloo3d_obj_addvertex(
|
ns.seed = gen_terrain_seed;
|
||||||
model, (struct vec4){.x = x, .y = 2 * RANDF() - 1, .z = -z});
|
ns.frequency = 0.025;
|
||||||
|
ns.fractal_type = FNL_FRACTAL_RIDGED;
|
||||||
|
float noisex = pos.x * CHUNKSIZE;
|
||||||
|
float noisey = -pos.z * CHUNKSIZE;
|
||||||
|
for (int z = 0; z < CHUNKVSIZE; z++) {
|
||||||
|
for (int x = 0; x < CHUNKVSIZE; x++) {
|
||||||
|
// clang-format off
|
||||||
|
haloo3d_obj_addvertex(model,
|
||||||
|
(struct vec4){.x = x, .y = fnlGetNoise2D(&ns, noisex + x, noisey + z), .z = -z });
|
||||||
|
//(struct vec4){.x = x, .y = 2 * RANDF() - 1, .z = -z});
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < (CHUNKSIZE + 1) * CHUNKSIZE; i++) {
|
for (int i = 0; i < CHUNKVSIZE * (CHUNKVSIZE - 1); i++) {
|
||||||
if ((i & CHUNKSIZE) == CHUNKSIZE) {
|
if ((i & CHUNKSIZE) == CHUNKSIZE) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
uint16_t bl = i;
|
uint16_t bl = i;
|
||||||
uint16_t br = i + 1;
|
uint16_t br = i + 1;
|
||||||
uint16_t tl = i + CHUNKSIZE + 1;
|
uint16_t tl = i + CHUNKVSIZE;
|
||||||
uint16_t tr = i + CHUNKSIZE + 2;
|
uint16_t tr = i + CHUNKVSIZE + 1;
|
||||||
haloo3d_facei face;
|
haloo3d_facei face;
|
||||||
fastface(face, landuv, bl, br, tl);
|
fastface(face, landuv, bl, br, tl);
|
||||||
haloo3d_obj_addface(model, face);
|
haloo3d_obj_addface(model, face);
|
||||||
@ -117,7 +137,7 @@ void gen_chunk(render_context *ctx, tecs *ecs, struct vec3i pos) {
|
|||||||
// eprintf("TEX: %p\n", haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY));
|
// eprintf("TEX: %p\n", haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY));
|
||||||
ECS_SETCOMPONENT(ecs, id, ecs_object){
|
ECS_SETCOMPONENT(ecs, id, ecs_object){
|
||||||
.texture = haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY),
|
.texture = haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY),
|
||||||
.scale = {.x = CHUNKSCALE, .y = CHUNKSCALE, .z = CHUNKSCALE},
|
.scale = {.x = CHUNKSCALE, .y = CHUNKSCALE * LANDHEIGHT, .z = CHUNKSCALE},
|
||||||
.lighting = &ecs->chunklight,
|
.lighting = &ecs->chunklight,
|
||||||
.model = model,
|
.model = model,
|
||||||
.cullbackface = 1,
|
.cullbackface = 1,
|
||||||
@ -405,7 +425,7 @@ ecs_eid setup_sea(tecs *ecs, render_context *ctx, ecs_placement *playerpos,
|
|||||||
};
|
};
|
||||||
haloo3d_obj *model = haloo3d_easystore_addobj(storage, "sea");
|
haloo3d_obj *model = haloo3d_easystore_addobj(storage, "sea");
|
||||||
haloo3d_obj_resetfixed(model, 2, 4);
|
haloo3d_obj_resetfixed(model, 2, 4);
|
||||||
struct vec3 seacol = haloo3d_gen_paletteuv(0xF26F);
|
struct vec3 seacol = haloo3d_gen_paletteuv(SEACOL); // 0xF26F);
|
||||||
int seauv = haloo3d_obj_addvtexture(model, seacol);
|
int seauv = haloo3d_obj_addvtexture(model, seacol);
|
||||||
// struct vec3 seacol2 = haloo3d_gen_paletteuv(0xF008);
|
// struct vec3 seacol2 = haloo3d_gen_paletteuv(0xF008);
|
||||||
// haloo3d_obj_addvtexture(model, seacol2);
|
// haloo3d_obj_addvtexture(model, seacol2);
|
||||||
@ -424,9 +444,9 @@ ecs_eid setup_sea(tecs *ecs, render_context *ctx, ecs_placement *playerpos,
|
|||||||
haloo3d_obj_addface(model, face);
|
haloo3d_obj_addface(model, face);
|
||||||
ECS_SETCOMPONENT(ecs, seaid, ecs_object){
|
ECS_SETCOMPONENT(ecs, seaid, ecs_object){
|
||||||
.texture = haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY),
|
.texture = haloo3d_easystore_gettex(&ecs->storage, PALETTEKEY),
|
||||||
.scale = {.x = VIEWDISTANCE * 1.5,
|
.scale = {.x = VIEWDISTANCE * 0.5,
|
||||||
.y = VIEWDISTANCE * 1.5,
|
.y = VIEWDISTANCE * 0.5,
|
||||||
.z = VIEWDISTANCE * 1.5},
|
.z = VIEWDISTANCE * 0.5},
|
||||||
.lighting = NULL,
|
.lighting = NULL,
|
||||||
.model = model,
|
.model = model,
|
||||||
.cullbackface = 1,
|
.cullbackface = 1,
|
||||||
@ -441,6 +461,7 @@ ecs_eid setup_sea(tecs *ecs, render_context *ctx, ecs_placement *playerpos,
|
|||||||
|
|
||||||
int main() { // int argc, char **argv) {
|
int main() { // int argc, char **argv) {
|
||||||
srand(clock());
|
srand(clock());
|
||||||
|
gen_terrain_seed = rand();
|
||||||
|
|
||||||
// Init unigi system. Can use anything here that can render to screen
|
// Init unigi system. Can use anything here that can render to screen
|
||||||
unigi_type_resolution res;
|
unigi_type_resolution res;
|
||||||
@ -467,7 +488,7 @@ int main() { // int argc, char **argv) {
|
|||||||
haloo3d_easytimer_init(&sdltimer, AVGWEIGHT);
|
haloo3d_easytimer_init(&sdltimer, AVGWEIGHT);
|
||||||
|
|
||||||
render_context context;
|
render_context context;
|
||||||
context.windowclear = 0xF333;
|
context.windowclear = SKYCOL;
|
||||||
context.nearclip = INIT_NEARCLIP;
|
context.nearclip = INIT_NEARCLIP;
|
||||||
context.farclip = INIT_FARCLIP;
|
context.farclip = INIT_FARCLIP;
|
||||||
context.fov = INIT_FOV;
|
context.fov = INIT_FOV;
|
||||||
|
Loading…
Reference in New Issue
Block a user