#include <nds.h>
#include "statue_bin.h"
static void get_pen_delta( int *dx, int *dy )
{
static int prev_pen[2] = { 0x7FFFFFFF, 0x7FFFFFFF };
u32 keys = keysHeld();
touchPosition touchXY;
if( keys & KEY_TOUCH )
{
touchRead(&touchXY);
if( prev_pen[0] != 0x7FFFFFFF )
{
*dx = (prev_pen[0] - touchXY.rawx);
*dy = (prev_pen[1] - touchXY.rawy);
}
prev_pen[0] = touchXY.rawx;
prev_pen[1] = touchXY.rawy;
}
else
{
prev_pen[0] = prev_pen[1] = 0x7FFFFFFF;
*dx = *dy = 0;
}
}
int main() {
int rotateX = 0;
int rotateY = 0;
videoSetMode(MODE_0_3D);
glInit();
glEnable(GL_ANTIALIAS);
glClearColor(0,0,0,31);
glClearPolyID(63);
glClearDepth(0x7FFF);
glViewport(0,0,255,191);
glSetToonTableRange( 0, 15, RGB15(8,8,8) );
glSetToonTableRange( 16, 31, RGB15(24,24,24) );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, 256.0 / 192.0, 0.1, 40);
glLight(0, RGB15(16,16,16) , 0, floattov10(-1.0), 0);
glLight(1, RGB15(16,16,16), floattov10(-1.0), 0, 0);
gluLookAt( 0.0, 0.0, -3.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
while(1)
{
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotateXi(rotateX);
glRotateYi(rotateY);
glMaterialf(GL_AMBIENT, RGB15(8,8,8));
glMaterialf(GL_DIFFUSE, RGB15(24,24,24));
glMaterialf(GL_SPECULAR, RGB15(0,0,0));
glMaterialf(GL_EMISSION, RGB15(0,0,0));
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 | POLY_TOON_HIGHLIGHT);
scanKeys();
u32 keys = keysHeld();
if( keys & KEY_UP ) rotateX += 1;
if( keys & KEY_DOWN ) rotateX -= 1;
if( keys & KEY_LEFT ) rotateY += 1;
if( keys & KEY_RIGHT ) rotateY -= 1;
int pen_delta[2];
get_pen_delta( &pen_delta[0], &pen_delta[1] );
rotateY -= pen_delta[0];
rotateX -= pen_delta[1];
glCallList((u32*)statue_bin);
glPopMatrix(1);
glFlush(0);
swiWaitForVBlank();
}
return 0;
}