topical media & game development
lib-game-darkgdk-samples-Matrix-Main.cpp / cpp
// Dark GDK - The Game Creators - www.thegamecreators.com
// include Dark GDK header file
include <DarkGDK.h>
// main entry point for program
void DarkGDK ( void )
{
// switch to media directory
dbSetDir ( "media\\" );
// set sync rate
dbSyncOn ( );
dbSyncRate ( 0 );
// load images
dbLoadImage ( "media\\face.jpg", 1 );
dbLoadImage ( "media\\water.jpg", 2 );
// colour the backdrop
dbColorBackdrop ( dbRGB ( 0, 0, 0 ) );
// create two matrices
for ( int m = 1; m < 3; m++ )
{
int s = 0;
if ( m == 1 )
s = 200;
if ( m == 2 )
s = 100;
// make matrix
dbMakeMatrix ( m, ( float ) s, ( float ) s, 36, 36 );
// position matrix
if ( m == 1 )
dbPositionMatrix ( m, -50, 20, -50 );
if ( m == 2 )
dbPositionMatrix ( m, 0, 120, 0 );
// set texturing and ghosting
dbPrepareMatrixTexture ( m, m, 36, 36 );
dbGhostMatrixOn ( m );
int tc = 1;
// control matrix tile
for ( int z = 35; z > -1; z-- )
{
int x = 0;
while ( x < 36 )
{
dbSetMatrixTile ( m, x, z, tc );
tc++;
x++;
}
}
}
// set up lights
dbSetPointLight ( 0, 50, 500, 50 );
dbColorLight ( 0, 1000, 1000, 200 );
// position camera
dbPositionCamera ( 50, 170, 50 );
dbPointCamera ( 50,0,50 );
float a = 0.0f;
// main loop
while ( LoopGDK ( ) )
{
// quit on escape key
if ( dbEscapeKey ( ) )
return;
// adjust height and normals of matrices to create movement
for ( int m = 1; m < 3; m++ )
{
a = dbWrapValue ( a + 1 );
for ( int z = 0; z < 37; z++ )
{
for ( int x = 0; x < 37; x++ )
{
float fX = dbCos ( a + ( x * 10 ) );
float fY = dbSin ( a + ( z * 10 ) );
float nx = 0.0f - ( dbCos ( a + ( x * 10 ) ) * 0.25f );
float nz = 0.0f - ( dbSin ( a + ( z * 10 ) ) * 0.25f );
float ny = 1.0f - nx - nz;
dbSetMatrixHeight ( m, x, z, ( fX + fY ) * 15.0f );
dbSetMatrixNormal ( m, x, z, nx, ny, nz );
}
}
// update the matrix
dbUpdateMatrix ( m );
}
// show information
dbText ( 20, dbScreenHeight ( ) - 40, "Water Matrix" );
// display frames per second
char szFPS [ 256 ] = "";
strcpy ( szFPS, "fps = " );
strcat ( szFPS, dbStr ( dbScreenFPS ( ) ) );
dbText ( dbScreenWidth ( ) - 20 - dbTextWidth ( szFPS ), dbScreenHeight ( ) - 40, szFPS );
// update screen
dbSync ( );
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.