void SkyBox::Draw() { Object::Draw(); if(displayListID) { displayListID = glGenLists(1); glNewList(displayListID, GL_COMPILE_AND_EXECUTE); glDisable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); DrawWall(0, 0, 90); // Esquerda DrawWall(1, 0, -90); // Direita DrawWall(2, 0, 0); // Frente DrawWall(3, 0, 180); // Tras DrawWall(4, 90, 0); // Cima DrawWall(5, -90, 0); // Baixo glDisable(GL_TEXTURE_2D); glEndList(); } else { glCallList(displayListID); } }
void draw(void) { int t, f; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (back_wall) { glMaterialfv(GL_FRONT, GL_DIFFUSE, wallcolor); DrawWall(); } glPushMatrix(); { glTranslatef(WIDTH / 2, HEIGHT / 2, 0); glRotatef(xlangle, 0, 1, 0); glRotatef(ylangle, 1, 0, 0); glTranslatef(-WIDTH / 2, -HEIGHT / 2, 0); glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition); } glPopMatrix(); glPushMatrix(); { glTranslatef(WIDTH / 2, HEIGHT / 2, 0); glRotatef(xangle, 0, 1, 0); glRotatef(yangle, 1, 0, 0); glTranslatef(-WIDTH / 2, -HEIGHT / 2, 0); DrawPosts(); DrawDooDads(); } glPopMatrix(); if (motion && moves.depth) { t = moves.head->t; f = moves.head->f; push(t, pop(f)); mpop(); } glutSwapBuffers(); }
void Init(void) //used to create the display lists { TowerListNum = glGenLists(1); GLfloat x,z; GLfloat NVectY; //y component for the NVects of the higher part glNewList(TowerListNum, GL_COMPILE); glBegin(GL_QUADS); //Create the lower part of the tower: for (int i = 0; i < NumOfEdges-1; i++) { x = cos((float)i/(float)NumOfEdges * PI * 2.0); z = sin((float)i/(float)NumOfEdges * PI * 2.0); glNormal3f(x,0.0,z); glVertex3f(x,LowerHeight,z); //same x,z and NVect: glVertex3f(x,0.0,z); x = cos((float)(i+1)/(float)NumOfEdges * PI * 2.0); z = sin((float)(i+1)/(float)NumOfEdges * PI * 2.0); glNormal3f(x,0.0,z); glVertex3f(x,0.0,z); //same x,z and NVect: glVertex3f(x,LowerHeight,z); } x = cos((float)i/(float)NumOfEdges * PI * 2.0); z = sin((float)i/(float)NumOfEdges * PI * 2.0); glNormal3f(x,0.0,z); glVertex3f(x,LowerHeight,z); //same x,z and NVect: glVertex3f(x,0.0,z); x = cos(1.0/(float)NumOfEdges * PI * 2.0); z = sin(1.0/(float)NumOfEdges * PI * 2.0); glNormal3f(x,0.0,z); glVertex3f(x,0.0,z); //same x,z and NVect: glVertex3f(x,LowerHeight,z); //Create the higher part: //The y component is the same for all NVects, so we can calculate it here: NVectY = (HR-1.0) / (LowerHeight - HigherHeight) * (HR-1.0); for (i = 0; i < NumOfEdges-1; i++) { x = cos((float)i/(float)NumOfEdges * PI * 2.0); z = sin((float)i/(float)NumOfEdges * PI * 2.0); glNormal3f(x,NVectY,z); glVertex3f(x*HR,HigherHeight,z*HR); //same x,z and NVect: glVertex3f(x,LowerHeight,z); x = cos((float)(i+1)/(float)NumOfEdges * PI * 2.0); z = sin((float)(i+1)/(float)NumOfEdges * PI * 2.0); glNormal3f(x,NVectY,z); glVertex3f(x,LowerHeight,z); //same x,z and NVect: glVertex3f(x*HR,HigherHeight,z*HR); } x = cos((float)i/(float)NumOfEdges * PI * 2.0); z = sin((float)i/(float)NumOfEdges * PI * 2.0); glNormal3f(x,NVectY,z); glVertex3f(x*HR,HigherHeight,z*HR); //same x,z and NVect: glVertex3f(x,LowerHeight,z); x = cos(1.0/(float)NumOfEdges * PI * 2.0); z = sin(1.0/(float)NumOfEdges * PI * 2.0); glNormal3f(x,NVectY,z); glVertex3f(x,LowerHeight,z); //same x,z and NVect: glVertex3f(x*HR,HigherHeight,z*HR); glEnd(); glEndList(); //////////////////////////////////////////////////////////// //WallList //////////////////////////////////////////////////////////// WallsListNum = glGenLists(1); glNewList(WallsListNum, GL_COMPILE); DrawWall(10.0); glPushMatrix(); glTranslatef(10.0,0.0,0.0); glPushMatrix(); glRotatef(270.0,0.0,1.0,0.0); DrawWall(10.0); glPopMatrix(); glTranslatef(0.0,0.0,10.0); glPushMatrix(); glRotatef(180.0,0.0,1.0,0.0); DrawWall(5.0); glRotatef(90.0,0.0,1.0,0.0); glTranslatef(0.0,0.0,5.0); DrawWall(5.0); glPopMatrix(); glTranslatef(-5.0,0.0,5.0); glPushMatrix(); glRotatef(180.0,0.0,1.0,0.0); DrawWall(5.0); glPopMatrix(); //Last and longest piece: glPushMatrix(); glRotatef(90.0,0.0,1.0,0.0); glTranslatef(0.0,0.0,-5.0); DrawWall(6.0); //the "door" glTranslatef(6.0,0.0,0.0); glBegin(GL_QUADS); glNormal3f(0.0,0.0,-1.0); glVertex3f(0.0,WallHeight / 2.0,0.0); glVertex3f(0.0,WallHeight,0.0); glVertex3f(3.0,WallHeight,0.0); glVertex3f(3.0,WallHeight / 2.0,0.0); glEnd(); i = (int)(3.0 / WallElementSize / 2); if (i * WallElementSize > 3.0) i--; glPushMatrix(); glTranslatef(0.0,WallHeight,0.0); DrawHigherWallPart(i); glPopMatrix(); glTranslatef(3.0,0.0,0.0); DrawWall(6.0); glPopMatrix(); glPopMatrix(); glEndList(); }
void C3dMazeEffect::InitLists() { { // floor const GLdouble dMazeSize = m_pMaze->GetMazeSize()*MAZE_GL_GRID_SIZE; const GLfloat fMSz = (GLfloat)dMazeSize; glNewList(MAZE_GL_LIST_FLOOR, GL_COMPILE); glColor4f(MAZE_GL_FLOOR_COLOR); glBegin(GL_QUADS); glVertex3d( 0, 0, 0); glVertex3d( 0, 0, dMazeSize); glVertex3d(dMazeSize, 0, dMazeSize); glVertex3d(dMazeSize, 0, 0); glEnd(); glEndList(); } { // Grids in the floor const GLdouble dMazeSize = m_pMaze->GetMazeSize()*MAZE_GL_GRID_SIZE; glNewList(MAZE_GL_LIST_GRIDS, GL_COMPILE); glBegin(GL_QUADS); glColor4f(MAZE_GL_GRID_COLOR); for(int i=0; i<=m_pMaze->GetMazeSize(); i++) { GLdouble d1 = i*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2.0; GLdouble d2 = i*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2.0; // vertical glVertex3d(d1, 0.01, 0); glVertex3d(d2, 0.01, 0); glVertex3d(d2, 0.01, dMazeSize); glVertex3d(d1, 0.01, dMazeSize); // honrizontal glVertex3d( 0, 0.01, d1); glVertex3d(dMazeSize, 0.01, d1); glVertex3d(dMazeSize, 0.01, d2); glVertex3d( 0, 0.01, d2); } glEnd(); glEndList(); } { // walls int i, j; glNewList(MAZE_GL_LIST_WALLS, GL_COMPILE); // horizontal gaps for(i=0; i<m_pMaze->GetMazeSize()+1; i++) { for(j=0; j<m_pMaze->GetMazeSize(); j++) { if(m_pMaze->IsGap(j, i, TRUE)) { DrawWall( j*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2, 0.0, i*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, (j+1)*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, MAZE_GL_WALL_HEIGHT, i*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2, TRUE); } } } // vertical gaps for(i=0; i<m_pMaze->GetMazeSize(); i++) { for(j=0; j<m_pMaze->GetMazeSize()+1; j++) { if(m_pMaze->IsGap(j, i, FALSE)) { DrawWall( j*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, 0.0, i*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2, j*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2, MAZE_GL_WALL_HEIGHT, (i+1)*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, FALSE); } } } // cross points for(i=0; i<m_pMaze->GetMazeSize()+1; i++) { for(j=0; j<m_pMaze->GetMazeSize()+1; j++) { DrawCrossPoint( j*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, 0.0, i*MAZE_GL_GRID_SIZE - MAZE_GL_WALL_THICKNESS/2, j*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2, MAZE_GL_WALL_HEIGHT, i*MAZE_GL_GRID_SIZE + MAZE_GL_WALL_THICKNESS/2); } } glEndList(); } { // target point int xTgt, yTgt; m_pMaze->GetTargetPos(xTgt, yTgt); GLdouble xLeft = (xTgt + 0.5) * MAZE_GL_GRID_SIZE - MAZE_GL_TARGET_SIZE/2.0; GLdouble xRight = (xTgt + 0.5) * MAZE_GL_GRID_SIZE + MAZE_GL_TARGET_SIZE/2.0; GLdouble yBottom = MAZE_GL_TARGET_BOTTOM; GLdouble yTop = MAZE_GL_TARGET_TOP; GLdouble zNear = (yTgt + 0.5) * MAZE_GL_GRID_SIZE - MAZE_GL_TARGET_SIZE/2.0; GLdouble zFar = (yTgt + 0.5) * MAZE_GL_GRID_SIZE + MAZE_GL_TARGET_SIZE/2.0; glNewList(MAZE_GL_LIST_TARGET, GL_COMPILE); glBegin(GL_QUADS); glColor4f(MAZE_GL_TARGET_COLOR); glVertex3d(xLeft, yBottom, zNear); glVertex3d(xRight, yBottom, zNear); glVertex3d(xRight, yTop, zNear); glVertex3d(xLeft, yTop, zNear); glVertex3d(xLeft, yTop, zFar); glVertex3d(xRight, yTop, zFar); glVertex3d(xRight, yBottom, zFar); glVertex3d(xLeft, yBottom, zFar); glVertex3d(xLeft, yTop, zFar); glVertex3d(xRight, yTop, zFar); glVertex3d(xRight, yTop, zNear); glVertex3d(xLeft, yTop, zNear); glVertex3d(xLeft, yBottom, zNear); glVertex3d(xRight, yBottom, zNear); glVertex3d(xRight, yBottom, zFar); glVertex3d(xLeft, yBottom, zFar); glVertex3d(xLeft, yBottom, zNear); glVertex3d(xLeft, yTop, zNear); glVertex3d(xLeft, yTop, zFar); glVertex3d(xLeft, yBottom, zFar); glVertex3d(xRight, yBottom, zFar); glVertex3d(xRight, yTop, zFar); glVertex3d(xRight, yTop, zNear); glVertex3d(xRight, yBottom, zNear); glEnd(); glEndList(); } }
void Castle::Draw() { glEnable(GL_LIGHTING); glColor3ub(0, 100, 0); glPushMatrix(); { glTranslated(position[0],position[1]+4,position[2]); glScaled(20, 10, 20); DrawWall(); glColor3ub(0, 100, 0); for(float i = -0.5; i <= 0.5; i += 0.5) { glPushMatrix(); { glTranslated(i, 1, 1); glScaled(0.2, 0.15, 0.05); Draw3DBrick(1); } glPopMatrix(); } for(float i = -0.5; i <= 0.5; i += 0.5) { glPushMatrix(); { glTranslated(i, 1, -1); glScaled(0.2, 0.15, 0.05); Draw3DBrick(1); } glPopMatrix(); } for(float i = -0.5; i <= 0.5; i += 0.5) { glPushMatrix(); { glTranslated(1, 1, i); glRotatef(90,0,1,0); glScaled(0.2, 0.15, 0.05); Draw3DBrick(1); } glPopMatrix(); } for(float i = -0.5; i <= 0.5; i += 0.5) { glPushMatrix(); { glTranslated(-1, 1, i); glRotatef(90,0,1,0); glScaled(0.2, 0.15, 0.05); Draw3DBrick(1); } glPopMatrix(); } //DrawClous(); glPushMatrix(); { glTranslated(0, 4, 1); DrawClouds(); } glPopMatrix(); glPushMatrix(); { glTranslated(-0.9, 1.4, 0.9); glScaled(0.2, 1, 0.2); DrawHead(); } glPopMatrix(); glPushMatrix(); { glTranslated(0.9, 1.4, 0.9); glScaled(0.2, 1, 0.2); DrawHead(); } glPopMatrix(); glPushMatrix(); { glTranslated(-0.9, 1.4, -0.9); glScaled(0.2, 1, 0.2); DrawHead(); } glPopMatrix(); glPushMatrix(); { glTranslated(0.9, 1.4, -0.9); glScaled(0.2, 1, 0.2); DrawHead(); } glPopMatrix(); glTranslated(0, 1, 0); glPushMatrix(); { glScaled(1, 0.01, 1); Draw3DBrick(2); } glPopMatrix(); glTranslated(0, 0.3, 0.5); glPushMatrix(); { glTranslated(0, 0.2, 0.0); glScaled(0.7, 1.1, 0.7); DrawMainHead(); } glPopMatrix(); glTranslated(0, 1.4, 0); DrawFlage(); } glPopMatrix(); glDisable(GL_LIGHTING); }