123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- program MixedText3D;
- {$mode objfpc}
- uses
- ctypes, nds9, math;
- var
- rtri: cfloat; // Angle For The Triangle ( NEW )
- rquad: cfloat; // Angle For The Quad ( NEW )
- console: PrintConsole;
- function fmodf(a,b:cfloat):cfloat;
- begin
- fmodf := b*Frac(a/b);
- end;
- procedure DrawGLScene();
- begin
- //ds does this automagically*open>///glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
- glLoadIdentity(); // Reset The Current Modelview Matrix
- glTranslatef(-1.5, 0.0,-6.0); // Move Left 1.5 Units And Into The Screen 6.0
- glRotatef(rtri, 0.0, 1.0, 0.0); // Rotate The Triangle On The Y axis ( NEW )
- glColor3f(1, 1, 1); // set the vertex color
- glBegin(GL_TRIANGLES); // Start Drawing A Triangle
- glColor3f( 1.0, 0.0, 0.0); // Set Top Point Of Triangle To Red
- glVertex3f( 0.0, 1.0, 0.0); // First Point Of The Triangle
- glColor3f( 0.0, 1.0, 0.0); // Set Left Point Of Triangle To Green
- glVertex3f(-1.0,-1.0, 0.0); // Second Point Of The Triangle
- glColor3f( 0.0, 0.0, 1.0); // Set Right Point Of Triangle To Blue
- glVertex3f( 1.0,-1.0, 0.0); // Third Point Of The Triangle
- glEnd(); // Done Drawing The Triangle
- glLoadIdentity(); // Reset The Current Modelview Matrix
- glTranslatef( 1.5, 0.0,-6.0); // Move Right 1.5 Units And Into The Screen 6.0
- glRotatef(rquad, 1.0, 0.0, 0.0); // Rotate The Quad On The X axis ( NEW )
- glColor3f( 0.5, 0.5, 1.0); // Set The Color To Blue One Time Only
- glBegin(GL_QUADS); // Draw A Quad
- glVertex3f(-1.0, 1.0, 0.0); // Top Left
- glVertex3f( 1.0, 1.0, 0.0); // Top Right
- glVertex3f( 1.0,-1.0, 0.0); // Bottom Right
- glVertex3f(-1.0,-1.0, 0.0); // Bottom Left
- glEnd(); // Done Drawing The Quad
- end;
- begin
- // initialize the geometry engine
- glInit();
- // Setup the Main screen for 3D
- videoSetMode(MODE_0_3D);
-
- //map some vram to background for printing
- vramSetBankC(VRAM_C_MAIN_BG_0x06000000);
-
- consoleInit(nil, 1, BgType_Text4bpp, BgSize_T_256x256, 31,0, true, true);
- //put bg 0 at a lower priority than the text background
- bgSetPriority(0, 1);
-
-
- // 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);
-
- // Set our viewport to be the same size as the screen
- glViewport(0,0,255,191);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(70, 256.0 / 192.0, 0.1, 100);
-
- //ds specific, several attributes can be set here
- glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE);
-
- // Set the current matrix to be the model matrix
- glMatrixMode(GL_MODELVIEW);
-
- iprintf(' Hello DS World'#10);
- iprintf(' www.devkitpro.org'#10);
- iprintf(' www.drunkencoders.com'#10);
- while true do
- begin
- DrawGLScene();
-
- // flush to screen
- glFlush(0);
-
- // wait for the screen to refresh
- swiWaitForVBlank();
- printf(#$1b'[15;5H rtri = %f '#10, rtri);
- printf(#$1b'[16;5H rquad = %f '#10, rquad);
- rtri := rtri + 0.9; // Increase The Rotation Variable For The Triangle ( NEW )
- rquad := rquad - 0.75; // Decrease The Rotation Variable For The Quad ( NEW )
- rtri := fmodf( rtri , 360 );
- rquad := fmodf( rquad, 360 );
- end;
-
- end.
|