[Change] Puffs of nebulae now look more visually pleasing.
This commit is contained in:
parent
497081b3ed
commit
cc37706fb1
@ -43,7 +43,6 @@ static glTexture* nebu_pufftexs[NEBULAE_PUFFS];
|
|||||||
/* Puff handling. */
|
/* Puff handling. */
|
||||||
typedef struct NebulaePuff_ {
|
typedef struct NebulaePuff_ {
|
||||||
double x, y; /* Position. */
|
double x, y; /* Position. */
|
||||||
double a, va; /* Alpha, alpha velocity. */
|
|
||||||
double height; /* Height vs player. */
|
double height; /* Height vs player. */
|
||||||
int tex; /* Texture. */
|
int tex; /* Texture. */
|
||||||
} NebulaePuff;
|
} NebulaePuff;
|
||||||
@ -256,13 +255,15 @@ void nebu_renderOverlay(const double dt) {
|
|||||||
#define ANG45 0.70710678118654757
|
#define ANG45 0.70710678118654757
|
||||||
#define COS225 0.92387953251128674
|
#define COS225 0.92387953251128674
|
||||||
#define SIN225 0.38268343236508978
|
#define SIN225 0.38268343236508978
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslated(gui_xoff+shake_pos.x, gui_yoff+shake_pos.y, 0.);
|
|
||||||
|
|
||||||
/* Render the puffs. */
|
/* Render the puffs. */
|
||||||
nebu_renderPuffs(dt, 0);
|
nebu_renderPuffs(dt, 0);
|
||||||
|
|
||||||
|
/* Prepare the matrix. */
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslated(gui_xoff+shake_pos.x, gui_yoff+shake_pos.y, 0.);
|
||||||
|
|
||||||
/* Mask for area player can still see (partially). */
|
/* Mask for area player can still see (partially). */
|
||||||
glShadeModel(GL_SMOOTH);
|
glShadeModel(GL_SMOOTH);
|
||||||
glBegin(GL_TRIANGLE_FAN);
|
glBegin(GL_TRIANGLE_FAN);
|
||||||
@ -345,11 +346,6 @@ void nebu_renderOverlay(const double dt) {
|
|||||||
/* Render the puffs. */
|
/* Render the puffs. */
|
||||||
void nebu_renderPuffs(const double dt, int below_player) {
|
void nebu_renderPuffs(const double dt, int below_player) {
|
||||||
int i;
|
int i;
|
||||||
glColour cPuff;
|
|
||||||
|
|
||||||
cPuff.r = cPurple.r;
|
|
||||||
cPuff.g = cPurple.g;
|
|
||||||
cPuff.b = cPurple.b;
|
|
||||||
|
|
||||||
for(i = 0; i < nebu_npuffs; i++) {
|
for(i = 0; i < nebu_npuffs; i++) {
|
||||||
if((below_player && (nebu_puffs[i].height < 1.)) ||
|
if((below_player && (nebu_puffs[i].height < 1.)) ||
|
||||||
@ -357,14 +353,11 @@ void nebu_renderPuffs(const double dt, int below_player) {
|
|||||||
|
|
||||||
/* Calculate new position. */
|
/* Calculate new position. */
|
||||||
if(!paused) {
|
if(!paused) {
|
||||||
nebu_puffs[i].x -= player->solid->vel.x * nebu_puffs[i].height * dt;
|
/* TODO: WTF?!? */
|
||||||
nebu_puffs[i].y -= player->solid->vel.y * nebu_puffs[i].height * dt;
|
/*nebu_puffs[i].x -= player->solid->vel.x * nebu_puffs[i].height * dt;*/
|
||||||
|
/*nebu_puffs[i].y -= player->solid->vel.y * nebu_puffs[i].height * dt;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate new alpha. */
|
|
||||||
/*nebu_puffs[i].a += nebu_puffs[i].va * dt;*/
|
|
||||||
cPuff.a = nebu_puffs[i].a;
|
|
||||||
|
|
||||||
/* Check boundaries. */
|
/* Check boundaries. */
|
||||||
if(nebu_puffs[i].x > SCREEN_W + NEBULAE_PUFF_BUFFER)
|
if(nebu_puffs[i].x > SCREEN_W + NEBULAE_PUFF_BUFFER)
|
||||||
nebu_puffs[i].x = -NEBULAE_PUFF_BUFFER;
|
nebu_puffs[i].x = -NEBULAE_PUFF_BUFFER;
|
||||||
@ -377,7 +370,7 @@ void nebu_renderPuffs(const double dt, int below_player) {
|
|||||||
|
|
||||||
/* Render. */
|
/* Render. */
|
||||||
gl_blitStatic(nebu_pufftexs[nebu_puffs[i].tex],
|
gl_blitStatic(nebu_pufftexs[nebu_puffs[i].tex],
|
||||||
nebu_puffs[i].x, nebu_puffs[i].y, &cPuff);
|
nebu_puffs[i].x, nebu_puffs[i].y, &cPurple);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -398,8 +391,7 @@ void nebu_prep(double density, double volatility) {
|
|||||||
SCREEN_W + NEBULAE_PUFF_BUFFER);
|
SCREEN_W + NEBULAE_PUFF_BUFFER);
|
||||||
nebu_puffs[i].y = (double)RNG(-NEBULAE_PUFF_BUFFER,
|
nebu_puffs[i].y = (double)RNG(-NEBULAE_PUFF_BUFFER,
|
||||||
SCREEN_H + NEBULAE_PUFF_BUFFER);
|
SCREEN_H + NEBULAE_PUFF_BUFFER);
|
||||||
nebu_puffs[i].a = (double)RNG(20,100)/100.;
|
nebu_puffs[i].height = RNGF() + 0.2;
|
||||||
nebu_puffs[i].height = RNGF()*2.;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
src/perlin.c
16
src/perlin.c
@ -243,7 +243,8 @@ float* noise_genNebulaeMap(const int w, const int h, const int n, float rug) {
|
|||||||
|
|
||||||
/* Generate tiny nebuale puffs */
|
/* Generate tiny nebuale puffs */
|
||||||
float* noise_genNebulaePuffMap(const int w, const int h, float rug) {
|
float* noise_genNebulaePuffMap(const int w, const int h, float rug) {
|
||||||
int x, y;
|
int x, y, hw, hh;
|
||||||
|
float d;
|
||||||
float f[3];
|
float f[3];
|
||||||
int octaves;
|
int octaves;
|
||||||
float hurst;
|
float hurst;
|
||||||
@ -271,12 +272,20 @@ float* noise_genNebulaePuffMap(const int w, const int h, float rug) {
|
|||||||
/* Start to create the nebulae. */
|
/* Start to create the nebulae. */
|
||||||
max = 0.;
|
max = 0.;
|
||||||
f[2] = 0.;
|
f[2] = 0.;
|
||||||
|
hw = w/2;
|
||||||
|
hh = h/2;
|
||||||
|
d = (float)MIN(hw, hh);
|
||||||
for(y = 0; y < h; y++) {
|
for(y = 0; y < h; y++) {
|
||||||
f[1] = zoom * (float)y / (float)h;
|
f[1] = zoom * (float)y / (float)h;
|
||||||
for(x = 0; x < w; x++) {
|
for(x = 0; x < w; x++) {
|
||||||
f[0] = zoom * (float)x / (float)w;
|
f[0] = zoom * (float)x / (float)w;
|
||||||
|
|
||||||
value = noise_turbulence(noise, f, octaves);
|
value = noise_turbulence(noise, f, octaves);
|
||||||
|
|
||||||
|
/* Make value also depend on distance from center. */
|
||||||
|
value *= (d - 1. - sqrtf((float)((x-hw)*(x-hw)+(y-hh)*(y-hh))))/d;
|
||||||
|
if(value < 0.) value = 0.;
|
||||||
|
|
||||||
if(max < value) max = value;
|
if(max < value) max = value;
|
||||||
|
|
||||||
nebulae[y*w + x] = value;
|
nebulae[y*w + x] = value;
|
||||||
@ -284,10 +293,11 @@ float* noise_genNebulaePuffMap(const int w, const int h, float rug) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Post filtering. */
|
/* Post filtering. */
|
||||||
value = 1. - max;
|
/*value = 1. - max;
|
||||||
for(y = 0; y < h; y++)
|
for(y = 0; y < h; y++)
|
||||||
for(x = 0; x < w; x++)
|
for(x = 0; x < w; x++)
|
||||||
nebulae[y*w + x] += value;
|
if(nebulae[y*w+x] > 0.)
|
||||||
|
nebulae[y*w + x] += value;*/
|
||||||
|
|
||||||
/* Clean up. */
|
/* Clean up. */
|
||||||
noise_delete(noise);
|
noise_delete(noise);
|
||||||
|
Loading…
Reference in New Issue
Block a user