Esempio n. 1
0
  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);
    }

  }
Esempio n. 2
0
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();
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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();
	}
}
Esempio n. 5
0
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);
}