Un mic snippet care creeaza si amplaseaza 4 case facute din planuri si triunghiuri!
Case:
glLoadIdentity();
glRotateY(rotateY);
//House 1
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(6.0f,0.0f,0.0f);
//House 2
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(-3.0f,0.0f,-6.0f);
//House 3
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(0.0f,0.0f,8.0f);
//House 4
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
Cod adaptat pentru Nintendo DS(Permite Miscarea Camerei):
#include
#include
#include
int DrawGLScene();
int rotateX = 0;
int rotateY = 0;
int rotateYa = 0;
int rotateXa = 0;
float rotate;
int main()
{
int rotateX = 0;
int rotateY = 0;
powerON(POWER_ALL);
videoSetMode(MODE_0_3D);
irqInit();
irqSet(IRQ_VBLANK, 0);
irqEnable(IRQ_VBLANK);
videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE);
BG_PALETTE_SUB[255] = RGB15(31,31,31);
consoleDemoInit();
glInit();
glEnable(GL_ANTIALIAS);
glClearColor(0,0,0,31);
glClearPolyID(63);
glClearDepth(0x7FFF);
glViewport(0,0,255,191);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, 256.0 / 192.0, 0.1, 100);
glColor3f(1, 1, 1);
iprintf("\x1b[10;0H Primitive Village");
while (1)
{
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_NONE);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
DrawGLScene();
glPopMatrix(1);
swiWaitForVBlank();
glFlush(0);
}
return 0;
}
int DrawGLScene()
{
glLoadIdentity();
glTranslatef(rotateYa, -1.0f,rotateX);
glRotateY(rotateY);
//House 1
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(6.0f,0.0f,0.0f);
//House 2
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(-3.0f,0.0f,-6.0f);
//House 3
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
glTranslatef(0.0f,0.0f,8.0f);
//House 4
glBegin(GL_QUADS);
glColor3f(3.0f,0.0f,0.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(-1.0f, 2.0f,-1.0f);
glVertex3f(-1.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 2.0f,-1.0f);
glVertex3f( 1.0f, 2.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f,-1.0f);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f( 1, 1, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( 1, 2, 1 );
glColor3f( 0.9, 0.9, 0 );
glVertex3f( 1, 2, 1 );
glVertex3f( 1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.8, 0.8, 0 );
glVertex3f( 1, 2, -1 );
glVertex3f( -1, 2, -1 );
glVertex3f( 0, 3, 0 );
glColor3f( 0.7, 0.7, 0 );
glVertex3f( -1, 2, 1 );
glVertex3f( 0, 3, 0 );
glVertex3f( -1, 2, -1 );
glEnd();
scanKeys();
u32 keys = keysHeld();
if( keys & KEY_UP ) rotateX += 1;
if( keys & KEY_DOWN ) rotateX -= 1;
if( keys & KEY_A ) rotateY += 1;
if( keys & KEY_Y ) rotateY -= 1;
if( keys & KEY_LEFT ) rotateYa +=1;
if( keys & KEY_RIGHT ) rotateYa -=1;
return TRUE;
}
Screenshot: