Textured Dot-Flag with Waves, just for fun
This commit is contained in:
parent
f627ff40bf
commit
6b16f84b1e
|
@ -37,6 +37,7 @@ set(SOURCES
|
|||
src/effects/rotatesphere.cpp
|
||||
src/effects/motionblur.cpp
|
||||
src/effects/fire.cpp
|
||||
src/effects/dotedflag.cpp
|
||||
)
|
||||
|
||||
set(ASSETS_cg
|
||||
|
@ -48,6 +49,7 @@ set(ASSETS_cg
|
|||
assets-cg/xorcircles.png
|
||||
assets-cg/mapworld.png
|
||||
assets-cg/circuit.png
|
||||
assets-cg/earth16c.png
|
||||
|
||||
assets-cg/optionbox.png
|
||||
)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
|
@ -41,4 +41,9 @@ circuit.png:
|
|||
optionbox.png:
|
||||
type: bopti-image
|
||||
profile: p8_rgb565a
|
||||
name: optionbox
|
||||
name: optionbox
|
||||
|
||||
earth16c.png:
|
||||
type: bopti-image
|
||||
profile: p8
|
||||
name: earthflag
|
|
@ -0,0 +1,117 @@
|
|||
#include "effects.h"
|
||||
|
||||
#include <num/num.h>
|
||||
#include "../utilities/fast_trig.h"
|
||||
#include "../utilities/3Dtransform.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
/********************************\
|
||||
* MOPRHING EFFECT - MODULE 2 *
|
||||
* Specific data and structures *
|
||||
\********************************/
|
||||
|
||||
|
||||
#define NB_POINTS_X 81
|
||||
#define NB_POINTS_Y 41
|
||||
#define NB_POINTS (NB_POINTS_X*NB_POINTS_Y)
|
||||
#define SCALE 80
|
||||
|
||||
Vertex3D *Flag;
|
||||
Vertex3D *FMorph;
|
||||
|
||||
extern libnum::num32 scale;
|
||||
extern libnum::num32 eye;
|
||||
extern libnum::num32 eyescale;
|
||||
extern int centerx, centery;
|
||||
|
||||
static float anglef = 0.0;
|
||||
static int angle = 0;
|
||||
static int delta = 0;
|
||||
|
||||
|
||||
extern bopti_image_t earthflag;
|
||||
|
||||
|
||||
void dotflag_init( bopti_image_t *screen )
|
||||
{
|
||||
eye = libnum::num32( 150 );
|
||||
scale = libnum::num32( SCALE );
|
||||
eyescale = eye*scale;
|
||||
|
||||
centerx = (DWIDTH / 2);
|
||||
centery = (MAXHEIGHT / 2);
|
||||
|
||||
Flag = (Vertex3D *) malloc( NB_POINTS * sizeof( Vertex3D ) );
|
||||
FMorph = (Vertex3D *) malloc( NB_POINTS * sizeof( Vertex3D ) );
|
||||
|
||||
// Create Flag
|
||||
for (int i = 0; i < NB_POINTS_X; i++)
|
||||
{
|
||||
for (int j = 0; j < NB_POINTS_Y; j++)
|
||||
{
|
||||
Flag[i+j*NB_POINTS_X].x = libnum::num32( -NB_POINTS_X/2 * 0.04f + i * 0.04f );
|
||||
Flag[i+j*NB_POINTS_X].y = libnum::num32( -NB_POINTS_Y/2 * 0.04f + j * 0.04f );
|
||||
Flag[i+j*NB_POINTS_X].z = libnum::num32(-1);
|
||||
Flag[i+j*NB_POINTS_X].color = image_get_pixel(&earthflag, i*5, j*5);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < NB_POINTS; i++)
|
||||
{
|
||||
FMorph[i].x = Flag[i].x;
|
||||
FMorph[i].y = Flag[i].y;
|
||||
FMorph[i].z = Flag[i].z;
|
||||
}
|
||||
|
||||
image_copy_palette( &earthflag, screen, -1 );
|
||||
screen->palette[0] = C_BLACK;
|
||||
}
|
||||
|
||||
|
||||
void dotflag_update( bopti_image_t *screen, [[Maybe_unused]] float dt )
|
||||
{
|
||||
anglef += dt / 50000.0;
|
||||
angle = (int) anglef;
|
||||
delta+=10;
|
||||
|
||||
for (int i = 0; i < NB_POINTS_X; i++)
|
||||
{
|
||||
for (int j = 0; j < NB_POINTS_Y; j++)
|
||||
{
|
||||
FMorph[i+j*NB_POINTS_X].z = libnum::num32(0.1f) * FastCosInt(i*9 + delta) * FastSinInt(j*18 + delta);
|
||||
}
|
||||
}
|
||||
|
||||
// Rotate the vertex in world coordinates and then project them on screen
|
||||
for (int i = 0; i < NB_POINTS; i++)
|
||||
{
|
||||
RotateVertex(&FMorph[i], angle, angle, angle);
|
||||
ProjectVertex(&FMorph[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dotflag_render( bopti_image_t *screen )
|
||||
{
|
||||
image_fill( screen, -128 );
|
||||
|
||||
for (int i = 0; i < NB_POINTS; i++)
|
||||
pixel( screen, FMorph[i].sx, FMorph[i].sy, Flag[i].color );
|
||||
|
||||
dimage( 0, 0, screen );
|
||||
}
|
||||
|
||||
void dotflag_deinit( bopti_image_t *screen )
|
||||
{
|
||||
free( Flag );
|
||||
free( FMorph );
|
||||
}
|
||||
|
||||
|
||||
char dotflag_TextToRender[100] = "Dot-Based Wavy Textured Flag > _\0";
|
||||
|
||||
char *dotflag_text( void )
|
||||
{
|
||||
return dotflag_TextToRender;
|
||||
}
|
|
@ -125,7 +125,7 @@ void moire_render( bopti_image_t *screen );
|
|||
void moire_deinit( bopti_image_t *screen );
|
||||
|
||||
|
||||
/* EFFECT #12 : Raindrops */
|
||||
/* EFFECT #13 : Raindrops */
|
||||
|
||||
char *raindrops_text( void );
|
||||
void raindrops_init( bopti_image_t *screen );
|
||||
|
@ -134,7 +134,7 @@ void raindrops_render( bopti_image_t *screen );
|
|||
void raindrops_deinit( bopti_image_t *screen );
|
||||
|
||||
|
||||
/* EFFECT #13 : Rotating Sphere */
|
||||
/* EFFECT #14 : Rotating Sphere */
|
||||
|
||||
char *rotatesphere_text( void );
|
||||
void rotatesphere_init( bopti_image_t *screen );
|
||||
|
@ -143,7 +143,7 @@ void rotatesphere_render( bopti_image_t *screen );
|
|||
void rotatesphere_deinit( bopti_image_t *screen );
|
||||
|
||||
|
||||
/* EFFECT #14 : Motion Blur on a Rotating Cube */
|
||||
/* EFFECT #15 : Motion Blur on a Rotating Cube */
|
||||
|
||||
char *motionblur_text( void );
|
||||
void motionblur_init( bopti_image_t *screen );
|
||||
|
@ -153,7 +153,7 @@ void motionblur_deinit( bopti_image_t *screen );
|
|||
void MotionBlur( bopti_image_t *screen );
|
||||
|
||||
|
||||
/* EFFECT #15 : FIRE */
|
||||
/* EFFECT #16 : FIRE */
|
||||
|
||||
char *fire_text( void );
|
||||
void fire_init( bopti_image_t *screen );
|
||||
|
@ -161,4 +161,13 @@ void fire_update( bopti_image_t *screen, float dt );
|
|||
void fire_render( bopti_image_t *screen );
|
||||
void fire_deinit( bopti_image_t *screen );
|
||||
|
||||
|
||||
/* EFFECT #17 : DOTTED TEXTURED FLAG */
|
||||
|
||||
char *dotflag_text( void );
|
||||
void dotflag_init( bopti_image_t *screen );
|
||||
void dotflag_update( bopti_image_t *screen, float dt );
|
||||
void dotflag_render( bopti_image_t *screen );
|
||||
void dotflag_deinit( bopti_image_t *screen );
|
||||
|
||||
#endif
|
||||
|
|
12
src/main.cpp
12
src/main.cpp
|
@ -24,17 +24,17 @@
|
|||
#include <string>
|
||||
|
||||
|
||||
#define TOTAL_NB_EFFECT 16
|
||||
#define TOTAL_NB_EFFECT 17
|
||||
typedef void (*PtrToFunc)( bopti_image_t * );
|
||||
typedef void (*PtrToFuncDt)( bopti_image_t *, float );
|
||||
typedef char* (*PtrTextFunc)( void );
|
||||
|
||||
|
||||
PtrTextFunc Effect_Text[] = { &fire_text, &rotatesphere_text, &starfield_text, &motionblur_text, &moire_text, &linemorph_text, &spline_text, &splineblur_text, &rotozoom_text, &plasma_text, &morph_text, &lens_text, &firecube_text, &matrix_text, &morphfire_text, &raindrops_text };
|
||||
PtrToFunc Effects_Init[] = { &fire_init, &rotatesphere_init, &starfield_init, &motionblur_init, &moire_init, &linemorph_init, &spline_init, &splineblur_init, &rotozoom_init, &plasma_init, &morph_init, &lens_init, &firecube_init, &matrix_init, &morphfire_init, &raindrops_init };
|
||||
PtrToFuncDt Effects_Update[] = { &fire_update, &rotatesphere_update, &starfield_update, &motionblur_update, &moire_update, &linemorph_update, &spline_update, &splineblur_update, &rotozoom_update, &plasma_update, &morph_update, &lens_update, &firecube_update, &matrix_update, &morphfire_update, &raindrops_update };
|
||||
PtrToFunc Effects_Render[] = { &fire_render, &rotatesphere_render, &starfield_render, &motionblur_render, &moire_render, &linemorph_render, &spline_render, &splineblur_render, &rotozoom_render, &plasma_render, &morph_render, &lens_render, &firecube_render, &matrix_render, &morphfire_render, &raindrops_render };
|
||||
PtrToFunc Effects_DeInit[] = { &fire_deinit, &rotatesphere_deinit, &starfield_deinit, &motionblur_deinit, &moire_deinit, &linemorph_deinit, &spline_deinit, &splineblur_deinit, &rotozoom_deinit, &plasma_deinit, &morph_deinit, &lens_deinit, &firecube_deinit, &matrix_deinit, &morphfire_deinit, &raindrops_deinit };
|
||||
PtrTextFunc Effect_Text[] = { &fire_text, &dotflag_text, &rotatesphere_text, &starfield_text, &motionblur_text, &moire_text, &linemorph_text, &spline_text, &splineblur_text, &rotozoom_text, &plasma_text, &morph_text, &lens_text, &firecube_text, &matrix_text, &morphfire_text, &raindrops_text };
|
||||
PtrToFunc Effects_Init[] = { &fire_init, &dotflag_init, &rotatesphere_init, &starfield_init, &motionblur_init, &moire_init, &linemorph_init, &spline_init, &splineblur_init, &rotozoom_init, &plasma_init, &morph_init, &lens_init, &firecube_init, &matrix_init, &morphfire_init, &raindrops_init };
|
||||
PtrToFuncDt Effects_Update[] = { &fire_update, &dotflag_update, &rotatesphere_update, &starfield_update, &motionblur_update, &moire_update, &linemorph_update, &spline_update, &splineblur_update, &rotozoom_update, &plasma_update, &morph_update, &lens_update, &firecube_update, &matrix_update, &morphfire_update, &raindrops_update };
|
||||
PtrToFunc Effects_Render[] = { &fire_render, &dotflag_render, &rotatesphere_render, &starfield_render, &motionblur_render, &moire_render, &linemorph_render, &spline_render, &splineblur_render, &rotozoom_render, &plasma_render, &morph_render, &lens_render, &firecube_render, &matrix_render, &morphfire_render, &raindrops_render };
|
||||
PtrToFunc Effects_DeInit[] = { &fire_deinit, &dotflag_deinit, &rotatesphere_deinit, &starfield_deinit, &motionblur_deinit, &moire_deinit, &linemorph_deinit, &spline_deinit, &splineblur_deinit, &rotozoom_deinit, &plasma_deinit, &morph_deinit, &lens_deinit, &firecube_deinit, &matrix_deinit, &morphfire_deinit, &raindrops_deinit };
|
||||
int current_effect = 0;
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define THREE_D_TRANSFORM
|
||||
|
||||
#include <num/num.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
typedef struct
|
||||
|
@ -14,6 +15,7 @@ typedef struct
|
|||
libnum::num32 rz;
|
||||
int16_t sx;
|
||||
int16_t sy;
|
||||
int8_t color;
|
||||
} Vertex3D;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue