Textured Dot-Flag with Waves, just for fun

This commit is contained in:
Sylvain PILLOT 2023-11-27 14:12:52 +01:00
parent f627ff40bf
commit 6b16f84b1e
7 changed files with 146 additions and 11 deletions

View File

@ -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
)

BIN
assets-cg/earth16c.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -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

117
src/effects/dotedflag.cpp Normal file
View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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;