summaryrefslogtreecommitdiff
path: root/packages/libndsfpc/examples/graphics/3D/nehe/lesson11
diff options
context:
space:
mode:
Diffstat (limited to 'packages/libndsfpc/examples/graphics/3D/nehe/lesson11')
-rw-r--r--packages/libndsfpc/examples/graphics/3D/nehe/lesson11/lesson11.pp284
1 files changed, 145 insertions, 139 deletions
diff --git a/packages/libndsfpc/examples/graphics/3D/nehe/lesson11/lesson11.pp b/packages/libndsfpc/examples/graphics/3D/nehe/lesson11/lesson11.pp
index c19eb28427..8e36243a4d 100644
--- a/packages/libndsfpc/examples/graphics/3D/nehe/lesson11/lesson11.pp
+++ b/packages/libndsfpc/examples/graphics/3D/nehe/lesson11/lesson11.pp
@@ -10,14 +10,14 @@ uses
var
points: array [0..63, 0..31, 0..2] of v16; // The Array For The Points On The Grid Of Our "Wave"
- wiggle_count: integer = 0; // Counter Used To Control How Fast Flag Waves
+ wiggle_count: integer = 0; // Counter Used To Control How Fast Flag Waves
- xrot: cfloat; // X Rotation ( NEW )
- yrot: cfloat; // Y Rotation ( NEW )
- zrot: cfloat; // Z Rotation ( NEW )
- hold: v16; // Temporarily Holds A Floating Point Value
+ xrot: cfloat; // X Rotation ( NEW )
+ yrot: cfloat; // Y Rotation ( NEW )
+ zrot: cfloat; // Z Rotation ( NEW )
+ hold: v16; // Temporarily Holds A Floating Point Value
- texture: array [0..0] of integer; // Storage For 3 Textures (only going to use 1 on the DS for this demo)
+ texture: array [0..0] of integer; // Storage For 3 Textures (only going to use 1 on the DS for this demo)
function sin(angle: cfloat): cfloat;
var
@@ -35,160 +35,166 @@ begin
result := f32tofloat(c);
end;
-function DrawGLScene(): boolean; // Here's Where We Do All The Drawing
+function DrawGLScene(): boolean; // Here's Where We Do All The Drawing
var
x, y: integer;
float_x, float_y, float_xb, float_yb: t16;
begin
- glColor3b(255,255,255); // set the vertex color
-
- glLoadIdentity(); // Reset The View
-
- glTranslatef(0.0,0.0,-12.0);
-
- glRotatef(xrot,1.0,0.0,0.0);
- glRotatef(yrot,0.0,1.0,0.0);
- glRotatef(zrot,0.0,0.0,1.0);
-
- glBindTexture(GL_TEXTURE_2D, texture[0]);
-
- glBegin(GL_QUADS);
- for x := 0 to 30 do
- begin
- for y := 0 to 30 do
- begin
- float_x := inttot16(x) shl 2;
- float_y := inttot16(y) shl 2;
- float_xb := inttot16(x+1) shl 2;
- float_yb := inttot16(y+1) shl 2;
-
- glTexCoord2t16( float_x, float_y);
- glVertex3v16( points[x][y][0], points[x][y][1], points[x][y][2] );
-
- glTexCoord2t16( float_x, float_yb );
- glVertex3v16( points[x][y+1][0], points[x][y+1][1], points[x][y+1][2] );
-
- glTexCoord2t16( float_xb, float_yb );
- glVertex3v16( points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2] );
-
- glTexCoord2t16( float_xb, float_y );
- glVertex3v16( points[x+1][y][0], points[x+1][y][1], points[x+1][y][2] );
- end;
- end;
- glEnd();
-
- if ( wiggle_count = 2 ) then
- begin
- for y := 0 to 31 do
- begin
- hold := points[0][y][2];
- for x := 0 to 31 do
- begin
- points[x][y][2] := points[x+1][y][2];
- end;
- points[31][y][2]:=hold;
- end;
- wiggle_count := 0;
- end;
-
- inc(wiggle_count);
-
- xrot:=xrot+0.3;
- yrot:=yrot+0.2;
- zrot:=zrot+0.4;
-
- result := true; // Everything Went OK
+ glColor3b(255,255,255); // set the vertex color
+
+ glLoadIdentity(); // Reset The View
+
+ glTranslatef(0.0,0.0,-12.0);
+
+ glRotatef(xrot,1.0,0.0,0.0);
+ glRotatef(yrot,0.0,1.0,0.0);
+ glRotatef(zrot,0.0,0.0,1.0);
+
+ glBindTexture(GL_TEXTURE_2D, texture[0]);
+
+ glBegin(GL_QUADS);
+ for x := 0 to 30 do
+ begin
+ for y := 0 to 30 do
+ begin
+ float_x := inttot16(x) shl 2;
+ float_y := inttot16(y) shl 2;
+ float_xb := inttot16(x+1) shl 2;
+ float_yb := inttot16(y+1) shl 2;
+
+ glTexCoord2t16( float_x, float_y);
+ glVertex3v16( points[x][y][0], points[x][y][1], points[x][y][2] );
+
+ glTexCoord2t16( float_x, float_yb );
+ glVertex3v16( points[x][y+1][0], points[x][y+1][1], points[x][y+1][2] );
+
+ glTexCoord2t16( float_xb, float_yb );
+ glVertex3v16( points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2] );
+
+ glTexCoord2t16( float_xb, float_y );
+ glVertex3v16( points[x+1][y][0], points[x+1][y][1], points[x+1][y][2] );
+ end;
+ end;
+ glEnd();
+
+ if ( wiggle_count = 2 ) then
+ begin
+ for y := 0 to 31 do
+ begin
+ hold := points[0][y][2];
+ for x := 0 to 31 do
+ begin
+ points[x][y][2] := points[x+1][y][2];
+ end;
+ points[31][y][2]:=hold;
+ end;
+ wiggle_count := 0;
+ end;
+
+ inc(wiggle_count);
+
+ xrot:=xrot+0.3;
+ yrot:=yrot+0.2;
+ zrot:=zrot+0.4;
+
+ result := true; // Everything Went OK
end;
-function LoadGLTextures(): boolean; // Load PCX files And Convert To Textures
+function LoadGLTextures(): boolean; // Load PCX files And Convert To Textures
var
- pcx: sImage; //////////////(NEW) and different from nehe.
+ pcx: sImage; //////////////(NEW) and different from nehe.
begin
- //load our texture
- loadPCX(pcuint8(drunkenlogo_pcx), @pcx);
+ //load our texture
+ loadPCX(pcuint8(drunkenlogo_pcx), @pcx);
- image8to16(@pcx);
+ image8to16(@pcx);
- glGenTextures(1, @texture[0]);
- glBindTexture(0, texture[0]);
- glTexImage2D(0, 0, GL_RGB, TEXTURE_SIZE_128 , TEXTURE_SIZE_128, 0, TEXGEN_TEXCOORD, pcx.image.data8);
+ glGenTextures(1, @texture[0]);
+ glBindTexture(0, texture[0]);
+ glTexImage2D(0, 0, GL_RGB, TEXTURE_SIZE_128 , TEXTURE_SIZE_128, 0, TEXGEN_TEXCOORD, pcx.image.data8);
- result := true;
+ result := true;
end;
procedure InitGL();
var
x, y:integer;
begin
- // Setup the Main screen for 3D
- videoSetMode(MODE_0_3D);
- vramSetBankA(VRAM_A_TEXTURE); //NEW must set up some memory for textures
-
- // initialize the geometry engine
- glInit();
-
- // enable textures
- glEnable(GL_TEXTURE_2D);
-
- // Set our viewport to be the same size as the screen
- glViewPort(0,0,255,191);
-
- // enable antialiasing
- glEnable(GL_ANTIALIAS);
-
- // setup the rear plane
- glClearColor(0,0,0,31); // BG must be opaque for AA to work
- glClearPolyID(63); // BG must have a unique polygon ID for AA to work
- glClearDepth($7FFF);
-
- LoadGLTextures();
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(70, 256.0 / 192.0, 0.1, 100);
-
- //need to set up some material properties since DS does not have them set by default
- glMaterialf(GL_AMBIENT, RGB15(31,31,31));
- glMaterialf(GL_DIFFUSE, RGB15(31,31,31));
- glMaterialf(GL_SPECULAR, BIT(15) or RGB15(16,16,16));
- glMaterialf(GL_EMISSION, RGB15(31,31,31));
-
- //ds uses a table for shinyness..this generates a half-ass one
- glMaterialShinyness();
-
- //ds specific, several attributes can be set here
- glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE );
-
-
- for x:=0 to 31 do
- begin
- for y:=0 to 31 do
- begin
- points[x][y][0] := (inttov16(x) div 4);
- points[x][y][1] := (inttov16(y) div 4);
- points[x][y][2] := sinLerp(x * (DEGREES_IN_CIRCLE div 32));
- end;
- end;
+ // Setup the Main screen for 3D
+ videoSetMode(MODE_0_3D);
+ vramSetBankA(VRAM_A_TEXTURE); //NEW must set up some memory for textures
+
+ // initialize the geometry engine
+ glInit();
+
+ // enable textures
+ glEnable(GL_TEXTURE_2D);
+
+ // Set our viewport to be the same size as the screen
+ glViewPort(0,0,255,191);
+
+ // enable antialiasing
+ glEnable(GL_ANTIALIAS);
+
+ // setup the rear plane
+ glClearColor(0,0,0,31); // BG must be opaque for AA to work
+ glClearPolyID(63); // BG must have a unique polygon ID for AA to work
+ glClearDepth($7FFF);
+
+ LoadGLTextures();
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(70, 256.0 / 192.0, 0.1, 100);
+
+ //need to set up some material properties since DS does not have them set by default
+ glMaterialf(GL_AMBIENT, RGB15(31,31,31));
+ glMaterialf(GL_DIFFUSE, RGB15(31,31,31));
+ glMaterialf(GL_SPECULAR, BIT(15) or RGB15(16,16,16));
+ glMaterialf(GL_EMISSION, RGB15(31,31,31));
+
+ //ds uses a table for shinyness..this generates a half-ass one
+ glMaterialShinyness();
+
+ //ds specific, several attributes can be set here
+ glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE );
+
+
+ for x:=0 to 31 do
+ begin
+ for y:=0 to 31 do
+ begin
+ points[x][y][0] := (inttov16(x) div 4);
+ points[x][y][1] := (inttov16(y) div 4);
+ points[x][y][2] := sinLerp(x * (DEGREES_IN_CIRCLE div 32));
+ end;
+ end;
end;
-
-begin
- InitGL();
-
- glMatrixMode(GL_MODELVIEW);
-
- while true do
- begin
- DrawGLScene();
-
- // flush to screen
- glFlush(0);
-
- // wait for the screen to refresh
- swiWaitForVBlank();
- end;
+var
+ pressed: integer;
+
+begin
+ InitGL();
+
+ glMatrixMode(GL_MODELVIEW);
+
+ while true do
+ begin
+ DrawGLScene();
+
+ // flush to screen
+ glFlush(0);
+
+ // wait for the screen to refresh
+ swiWaitForVBlank();
+
+ scanKeys();
+ pressed := keysDown();
+ if (pressed and KEY_START) <> 0 then break;
+ end;
end.