(**************************************** * NDS NeHe Lesson 05 * * Author: Dovoto * ****************************************) program Lesson05; {$mode objfpc} uses ctypes, nds9; var rtri: cfloat = 0.0; rquad: cfloat = 0.0; function DrawGLScene(): boolean; begin 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 ) glBegin(GL_TRIANGLES); // Start Drawing A Triangle glColor3f(1.0,0.0,0.0); // Red glVertex3f( 0.0, 1.0, 0.0); // Top Of Triangle (Front) glColor3f(0.0,1.0,0.0); // Green glVertex3f(-1.0,-1.0, 1.0); // Left Of Triangle (Front) glColor3f(0.0,0.0,1.0); // Blue glVertex3f( 1.0,-1.0, 1.0); // Right Of Triangle (Front) glColor3f(1.0,0.0,0.0); // Red glVertex3f( 0.0, 1.0, 0.0); // Top Of Triangle (Right) glColor3f(0.0,0.0,1.0); // Blue glVertex3f( 1.0,-1.0, 1.0); // Left Of Triangle (Right) glColor3f(0.0,1.0,0.0); // Green glVertex3f( 1.0,-1.0, -1.0); // Right Of Triangle (Right) glColor3f(1.0,0.0,0.0); // Red glVertex3f( 0.0, 1.0, 0.0); // Top Of Triangle (Back) glColor3f(0.0,1.0,0.0); // Green glVertex3f( 1.0,-1.0, -1.0); // Left Of Triangle (Back) glColor3f(0.0,0.0,1.0); // Blue glVertex3f(-1.0,-1.0, -1.0); // Right Of Triangle (Back) glColor3f(1.0,0.0,0.0); // Red glVertex3f( 0.0, 1.0, 0.0); // Top Of Triangle (Left) glColor3f(0.0,0.0,1.0); // Blue glVertex3f(-1.0,-1.0,-1.0); // Left Of Triangle (Left) glColor3f(0.0,1.0,0.0); // Green glVertex3f(-1.0,-1.0, 1.0); // Right Of Triangle (Left) glEnd(); // Done Drawing The Pyramid glLoadIdentity(); // Reset The Current Modelview Matrix glTranslatef(1.5,0.0,-7.0); // Move Right 1.5 Units And Into The Screen 7.0 glRotatef(rquad,1.0,1.0,1.0); // Rotate The Quad On The X axis ( NEW ) glBegin(GL_QUADS); // Draw A Quad glColor3f(0.0,1.0,0.0); // Set The Color To Green glVertex3f( 1.0, 1.0,-1.0); // Top Right Of The Quad (Top) glVertex3f(-1.0, 1.0,-1.0); // Top Left Of The Quad (Top) glVertex3f(-1.0, 1.0, 1.0); // Bottom Left Of The Quad (Top) glVertex3f( 1.0, 1.0, 1.0); // Bottom Right Of The Quad (Top) glColor3f(1.0,0.5,0.0); // Set The Color To Orange glVertex3f( 1.0,-1.0, 1.0); // Top Right Of The Quad (Bottom) glVertex3f(-1.0,-1.0, 1.0); // Top Left Of The Quad (Bottom) glVertex3f(-1.0,-1.0,-1.0); // Bottom Left Of The Quad (Bottom) glVertex3f( 1.0,-1.0,-1.0); // Bottom Right Of The Quad (Bottom) glColor3f(1.0,0.0,0.0); // Set The Color To Red glVertex3f( 1.0, 1.0, 1.0); // Top Right Of The Quad (Front) glVertex3f(-1.0, 1.0, 1.0); // Top Left Of The Quad (Front) glVertex3f(-1.0,-1.0, 1.0); // Bottom Left Of The Quad (Front) glVertex3f( 1.0,-1.0, 1.0); // Bottom Right Of The Quad (Front) glColor3f(1.0,1.0,0.0); // Set The Color To Yellow glVertex3f( 1.0,-1.0,-1.0); // Top Right Of The Quad (Back) glVertex3f(-1.0,-1.0,-1.0); // Top Left Of The Quad (Back) glVertex3f(-1.0, 1.0,-1.0); // Bottom Left Of The Quad (Back) glVertex3f( 1.0, 1.0,-1.0); // Bottom Right Of The Quad (Back) glColor3f(0.0,0.0,1.0); // Set The Color To Blue glVertex3f(-1.0, 1.0, 1.0); // Top Right Of The Quad (Left) glVertex3f(-1.0, 1.0,-1.0); // Top Left Of The Quad (Left) glVertex3f(-1.0,-1.0,-1.0); // Bottom Left Of The Quad (Left) glVertex3f(-1.0,-1.0, 1.0); // Bottom Right Of The Quad (Left) glColor3f(1.0,0.0,1.0); // Set The Color To Violet glVertex3f( 1.0, 1.0,-1.0); // Top Right Of The Quad (Right) glVertex3f( 1.0, 1.0, 1.0); // Top Left Of The Quad (Right) glVertex3f( 1.0,-1.0, 1.0); // Bottom Left Of The Quad (Right) glVertex3f( 1.0,-1.0,-1.0); // Bottom Right Of The Quad (Right) glEnd(); // Done Drawing The Quad rtri:=rtri+0.2; // Increase The Rotation Variable For The Triangle ( NEW ) rquad:=rquad-0.15; // Decrease The Rotation Variable For The Quad ( NEW ) result := true; // Keep Going end; begin // Setup the Main screen for 3D videoSetMode(MODE_0_3D); // initialize the geometry engine glInit(); // enable antialiasing glEnable(GL_ANTIALIAS); // Specify the Clear Color and Depth glClearColor(0,0,0,31); 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); while true do begin // Set the current matrix to be the model matrix glMatrixMode(GL_MODELVIEW); //Push our original Matrix onto the stack (save state) glPushMatrix(); DrawGLScene(); // Pop our Matrix from the stack (restore state) glPopMatrix(1); // flush to screen glFlush(0); swiWaitForVBlank(); end; end.