www.pudn.com > 3dgprsrc.rar > SURFACE.C
/** 3DGPL *************************************************\
* Sample application: *
* Draws a landscape. *
* *
* (c) 1995-98 Sergei Savchenko, (savs@cs.mcgill.ca) *
\**********************************************************/
#include <stdio.h>
#include <string.h>
#include "../hardware/hardware.h"
#include "../colour/colour.h"
#include "../engine/engine.h"
#include "../graphics/graphics.h"
#include "../trans/trans.h"
#include "../data/data.h"
#if defined(_RGB_) /* paths to data sets */
#if defined(_32BPP_)
char path[128]="data/rgb32/";
#endif
#if defined(_16BPP_)
char path[128]="data/rgb16/";
#endif
#if defined(_8BPP_)
char path[128]="data/rgb8/";
#endif
#endif
#if defined(_CI_)
#if defined(_8BPP_)
char path[128]="data/ci8/";
#endif
#endif
unsigned char alp=0,bet=0,gam=0; /* camera parameters */
int x=0,y=0,z=90;
int zz=11,xx=11;
struct application /* scene */
{
struct M_surface_object *obj;
int no;
struct M_light **lights;
#if defined(_CI_)
struct CL_palette *p;
#endif
} *app;
/**********************************************************/
void app_handler(int kk) /* event handler */
{
switch(kk)
{
case HW_KEY_ENTER: HW_close_event_loop(); break;
case HW_KEY_ARROW_RIGHT: gam+=5; break;
case HW_KEY_ARROW_LEFT: gam-=5; break;
case HW_KEY_ARROW_UP: bet+=5; break;
case HW_KEY_ARROW_DOWN: bet-=5; break;
case 'X': case 'x': zz++; break;
case 'S': case 's': zz--; break;
case 'D': case 'd': xx++; break;
case 'C': case 'c': xx--; break;
case 'A': case 'a': z-=10; break;
case 'Z': case 'z': z+=10; break;
case 'W': case 'w': M_init_rendering(M_WIRE); break;
case 'F': case 'f': M_init_rendering(M_FLAT); break;
case 'G': case 'g': M_init_rendering(M_SHADED); break;
case 'T': case 't': M_init_rendering(M_TEXTURED); break;
}
}
/**********************************************************/
void app_main() /* rendering loop */
{
#if defined(_CI_)
G_clear(0,0);
#endif
#if defined(_RGB_)
G_clear(0,0,0,0);
#endif
M_set_camera(alp,bet,gam,0,z,0,8);
M_shade_surface_object(app->obj,app->no,app->lights);
M_render_surface_object(app->obj,xx,zz);
#if defined(_RGB_)
G_text(0,0,"<a><z><s><x><t><f><g><enter-exit>",
CL_colour(CL_COLOUR_LEVELS-1,CL_COLOUR_LEVELS-1,CL_COLOUR_LEVELS-1),
CL_LIGHT_LEVELS-1,CL_LIGHT_LEVELS-1,CL_LIGHT_LEVELS-1);
#endif
#if defined(_CI_)
G_text(0,0,"<a><z><s><x><t><f><g><enter-exit>",
1,CL_LIGHT_LEVELS-1);
#endif
HW_blit();
}
/**********************************************************/
int main(int no,char **o) /* initialize, launch the loop */
{
char *display;
if(no==2) display=o[1]; else display=NULL;
strcat(path,"surface.dat");
app=D_data(path);
#if defined(_CI_)
CL_init_colour(app->p);
#endif
#if defined(_RGB_)
CL_init_colour();
#endif
T_init_math();
M_init_rendering(M_TEXTURED);
M_init_surface_object(app->obj);
G_init_graphics();
HW_init_screen(display,"3Dgpl");
HW_init_event_loop(app_main,app_handler);
HW_close_screen();
return(1);
}
/**********************************************************/