Example #1
0
void Avion::forma()
{
    typedef M3DVector3f Triangulo[3];
    Triangulo avion[]=
    {	
	    {{ 0.0f, 0.0f, 60.0f},{ -15.0f, 0.0f, 30.0f},{ 15.0f,0.0f,30.0f}},
	    {{ 15.0f, 0.0f,  30.0f},{ 0.0f,  15.0f, 30.0f},{ 0.0f,  0.0f,  60.0f}},
        {{ 0.0f, 0.0f, 60.0f },{ 0.0f, 15.0f, 30.0f },{ -15.0f, 0.0f, 30.0f }},
	    {{ -15.0f, 0.0f, 30.0f },{ 0.0f, 15.0f, 30.0f },{ 0.0f, 0.0f, -56.0f }},
	    {{ 0.0f, 0.0f, -56.0f },{ 0.0f, 15.0f, 30.0f },{ 15.0f,0.0f,30.0f }},
	    {{ 15.0f,0.0f,30.0f },{-15.0f, 0.0f, 30.0f  },{ 0.0f, 0.0f, -56.0f }},
	    {{ 0.0f,2.0f,27.0f },{ -60.0f, 2.0f, -8.0f },{ 60.0f, 2.0f, -8.0f }},
	    {{ 60.0f, 2.0f, -8.0f},{0.0f, 7.0f, -8.0f},{0.0f,2.0f,27.0f }},
	    {{60.0f, 2.0f, -8.0f},{-60.0f, 2.0f, -8.0f},{0.0f,7.0f,-8.0f }},
	    {{0.0f,2.0f,27.0f},{0.0f, 7.0f, -8.0f},{-60.0f, 2.0f, -8.0f}},
	    {{-30.0f, -0.50f, -57.0f},{30.0f, -0.50f, -57.0f},{0.0f,-0.50f,-40.0f}},
	    {{ 0.0f,-0.5f,-40.0f },{30.0f, -0.5f, -57.0f},{0.0f, 4.0f, -57.0f }},
	    {{ 0.0f, 4.0f, -57.0f },{ -30.0f, -0.5f, -57.0f },{ 0.0f,-0.5f,-40.0f }},
	    {{ 30.0f,-0.5f,-57.0f },{ -30.0f, -0.5f, -57.0f },{ 0.0f, 4.0f, -57.0f }},
	    {{ 0.0f,0.5f,-40.0f },{ 3.0f, 0.5f, -57.0f },{ 0.0f, 25.0f, -65.0f }},
	    {{ 0.0f, 25.0f, -65.0f },{ -3.0f, 0.5f, -57.0f},{ 0.0f,0.5f,-40.0f }},
	    {{ 3.0f,0.5f,-57.0f },{ -3.0f, 0.5f, -57.0f },{ 0.0f, 25.0f, -65.0f }},
    };

    glBegin(GL_TRIANGLES);
	for (int i=0; i<17; i++) {
		//TODO Agregar normales
		M3DVector3f normal;
		m3dFindNormal(normal, avion[i][0], avion[i][1], avion[i][2]);
		glNormal3f(normal[0], normal[1], normal[2]);
		glVertex3fv(avion[i][0]);
		glVertex3fv(avion[i][1]);
		glVertex3fv(avion[i][2]);
	}
    glEnd();
}
Example #2
0
void MakePyramid(GLBatch& pyramidBatch)
    {
	pyramidBatch.Begin(GL_TRIANGLES, 18, 1);
    
	// Bottom of pyramid
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f);
    
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
	pyramidBatch.Vertex3f(1.0f, -1.0f, -1.0f);
    
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
	pyramidBatch.Vertex3f(1.0f, -1.0f, 1.0f);
    
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 1.0f);
	pyramidBatch.Vertex3f(-1.0f, -1.0f, 1.0f);
    
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3f(-1.0f, -1.0f, -1.0f);
    
	pyramidBatch.Normal3f(0.0f, -1.0f, 0.0f);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
	pyramidBatch.Vertex3f(1.0f, -1.0f, 1.0f);
    
	
	M3DVector3f vApex = { 0.0f, 1.0f, 0.0f };
	M3DVector3f vFrontLeft = { -1.0f, -1.0f, 1.0f };
	M3DVector3f vFrontRight = { 1.0f, -1.0f, 1.0f };
	M3DVector3f vBackLeft = { -1.0f, -1.0f, -1.0f };
	M3DVector3f vBackRight = { 1.0f, -1.0f, -1.0f };
	M3DVector3f n;
	
	// Front of Pyramid
	m3dFindNormal(n, vApex, vFrontLeft, vFrontRight);
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.5f, 1.0f);
	pyramidBatch.Vertex3fv(vApex);		// Apex
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3fv(vFrontLeft);		// Front left corner
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
	pyramidBatch.Vertex3fv(vFrontRight);		// Front right corner
    
    
	m3dFindNormal(n, vApex, vBackLeft, vFrontLeft);
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.5f, 1.0f);
	pyramidBatch.Vertex3fv(vApex);		// Apex
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
	pyramidBatch.Vertex3fv(vBackLeft);		// Back left corner
	
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3fv(vFrontLeft);		// Front left corner
    
	m3dFindNormal(n, vApex, vFrontRight, vBackRight);
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.5f, 1.0f);
	pyramidBatch.Vertex3fv(vApex);				// Apex
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
	pyramidBatch.Vertex3fv(vFrontRight);		// Front right corner
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3fv(vBackRight);			// Back right cornder
    
    
	m3dFindNormal(n, vApex, vBackRight, vBackLeft);
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.5f, 1.0f);
	pyramidBatch.Vertex3fv(vApex);		// Apex
    
	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
	pyramidBatch.Vertex3fv(vBackRight);		// Back right cornder

	pyramidBatch.Normal3fv(n);
	pyramidBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
	pyramidBatch.Vertex3fv(vBackLeft);		// Back left corner

	pyramidBatch.End();
	}
Example #3
0
// Called to draw scene
void RenderScene(void)
	{
	M3DVector3f vNormal;	// Storeage for calculated surface normal

	// Clear the window with current clearing color
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	// Save the matrix state and do the rotations
	glPushMatrix();
	glRotatef(xRot, 1.0f, 0.0f, 0.0f);
	glRotatef(yRot, 0.0f, 1.0f, 0.0f);


	// Nose Cone - Points straight down
    // Set material color
	glColor3ub(128, 128, 128);
	glBegin(GL_TRIANGLES);
        glNormal3f(0.0f, -1.0f, 0.0f);
		glNormal3f(0.0f, -1.0f, 0.0f);
		glVertex3f(0.0f, 0.0f, 60.0f);
		glVertex3f(-15.0f, 0.0f, 30.0f);
		glVertex3f(15.0f,0.0f,30.0f);
                
	
        // Verticies for this panel
        {
        M3DVector3f vPoints[3] = {{ 15.0f, 0.0f,  30.0f},
                                        { 0.0f,  15.0f, 30.0f},
                                        { 0.0f,  0.0f,  60.0f}};

        // Calculate the normal for the plane
        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
		glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }	


        {
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, 60.0f },
                                  { 0.0f, 15.0f, 30.0f },
                                  { -15.0f, 0.0f, 30.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }


        // Body of the Plane ////////////////////////
        {
        M3DVector3f vPoints[3] = {{ -15.0f, 0.0f, 30.0f },
                                  { 0.0f, 15.0f, 30.0f },
                                  { 0.0f, 0.0f, -56.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                	
        {
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, -56.0f },
                                  { 0.0f, 15.0f, 30.0f },
                                  { 15.0f,0.0f,30.0f }};
	
        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                		
    
		glNormal3f(0.0f, -1.0f, 0.0f);
		glVertex3f(15.0f,0.0f,30.0f);
		glVertex3f(-15.0f, 0.0f, 30.0f);
		glVertex3f(0.0f, 0.0f, -56.0f);
    
        ///////////////////////////////////////////////
        // Left wing
        // Large triangle for bottom of wing
        {
        M3DVector3f vPoints[3] = {{ 0.0f,2.0f,27.0f },
                                  { -60.0f, 2.0f, -8.0f },
                                  { 60.0f, 2.0f, -8.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
                        	
        {
        M3DVector3f vPoints[3] = {{ 60.0f, 2.0f, -8.0f},
                                   {0.0f, 7.0f, -8.0f},
                                   {0.0f,2.0f,27.0f }};
                
        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
        {
        M3DVector3f vPoints[3] = {{60.0f, 2.0f, -8.0f},
					{-60.0f, 2.0f, -8.0f},
					{0.0f,7.0f,-8.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
        {
        M3DVector3f vPoints[3] = {{0.0f,2.0f,27.0f},
                                    {0.0f, 7.0f, -8.0f},
                                    {-60.0f, 2.0f, -8.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
                        
        // Tail section///////////////////////////////
        // Bottom of back fin
		glNormal3f(0.0f, -1.0f, 0.0f);
		glVertex3f(-30.0f, -0.50f, -57.0f);
		glVertex3f(30.0f, -0.50f, -57.0f);
		glVertex3f(0.0f,-0.50f,-40.0f);

        {
        M3DVector3f vPoints[3] = {{ 0.0f,-0.5f,-40.0f },
                                  {30.0f, -0.5f, -57.0f},
                                {0.0f, 4.0f, -57.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
                        
        {
        M3DVector3f vPoints[3] = {{ 0.0f, 4.0f, -57.0f },
                { -30.0f, -0.5f, -57.0f },
                { 0.0f,-0.5f,-40.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

        {
        M3DVector3f vPoints[3] = {{ 30.0f,-0.5f,-57.0f },
					{ -30.0f, -0.5f, -57.0f },
					{ 0.0f, 4.0f, -57.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
        {
        M3DVector3f vPoints[3] = {{ 0.0f,0.5f,-40.0f },
					{ 3.0f, 0.5f, -57.0f },
					{ 0.0f, 25.0f, -65.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
                        
        {
        M3DVector3f vPoints[3] = {{ 0.0f, 25.0f, -65.0f },
					{ -3.0f, 0.5f, -57.0f},
					{ 0.0f,0.5f,-40.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
        {
        M3DVector3f vPoints[3] = {{ 3.0f,0.5f,-57.0f },
					{ -3.0f, 0.5f, -57.0f },
					{ 0.0f, 25.0f, -65.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
                
                
        glEnd();
                
    	// Restore the matrix state
	glPopMatrix();
	// Display the results
	glutSwapBuffers();
	}
Example #4
0
// Called to draw scene
void RenderScene(void)
	{
	M3DVector3f vNormal;	// Storeage for calculated surface normal

	// Clear the window with current clearing color
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	
	/***********************************first ship start*********************************************/ 
	// Save the matrix state and do the rotations
	glPushMatrix();
	glRotatef(xRot, -80.0f, 20.0f, 0.0f);
	glRotatef(yRot, -80.0f, 20.0f, 0.0f);
	//set position
	glTranslatef(-80.0f, 0.0f, 0.0f);
    // Set material color
	glColor3ub(92, 64, 51);
	glBegin(GL_TRIANGLES);
       
        //sisi1
		{
        M3DVector3f vPoints[3] = {{ -40.0f,20.0f,0.0f },
                                  {-30.0f, 0.0f, 0.0f},
                                {-30.0f, 20.0f, 20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi2
		{
        M3DVector3f vPoints[3] = {{ -30.0f,20.0f,20.0f },
                                  {-30.0f, 0.0f, 0.0f},
                                {30.0f, 0.0f, 0.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi3
		{
        M3DVector3f vPoints[3] = {{ -30.0f,20.0f,20.0f },
                                  {30.0f, 0.0f, 0.0f},
                                {30.0f,20.0f,20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi4
		{
        M3DVector3f vPoints[3] = {{ 30.0f, 20.0f, 20.0f },
                                  {30.0f, 0.0f, 0.0f},
                                {40.0f,20.0f,0.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		      //sisi1b
		{
        M3DVector3f vPoints[3] = {{ -40.0f,20.0f,0.0f },
								{-30.0f, 20.0f, -20.0f },
                                  {-30.0f, 0.0f, 0.0f}
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi2b
		{
        M3DVector3f vPoints[3] = {{ -30.0f,20.0f,-20.0f },
								{30.0f, 0.0f, 0.0f },
                                  {-30.0f, 0.0f, 0.0f}
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi3b
		{
        M3DVector3f vPoints[3] = {{ -30.0f,20.0f,-20.0f },
									{30.0f,20.0f,-20.0f },
                                  {30.0f, 0.0f, 0.0f}
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi4b
		{
        M3DVector3f vPoints[3] = {{ 30.0f, 20.0f, -20.0f },
									{40.0f,20.0f,0.0f },
                                  {30.0f, 0.0f, 0.0f}
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		glColor3ub(107, 66, 38);
			//sisia1
		{
        M3DVector3f vPoints[3] = {{ -40.0f, 20.0f, 0.0f },
                                  {-30.0f, 20.0f, 20.0f},
                                {-30.0f,20.0f,-20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
	
				//sisia2
		{
        M3DVector3f vPoints[3] = {{ -30.0f, 20.0f, -20.0f },
                                  {-30.0f, 20.0f, 20.0f},
								{30.0f,20.0f,20.0f }
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisia3
	{
        M3DVector3f vPoints[3] = {{ 30.0f, 20.0f, 20.0f },
								{30.0f,20.0f,-20.0f },
                                 {-30.0f, 20.0f, -20.0f}
                                };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisia4
	
			{
        M3DVector3f vPoints[3] = {{30.0f, 20.0f, 20.0f},
								{ 40.0f, 20.0f, 0.0f },
                                {30.0f,20.0f,-20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

	//sampingnya cube
	//sc1
	
			{
        M3DVector3f vPoints[3] = {{-10.0f, 20.0f, 8.0f},
								{ -5.0f, 20.0f, 8.0f },
                                {-10.0f,24.0f,8.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sc2
	
			{
        M3DVector3f vPoints[3] = {{-10.0f, 24.0f, 8.0f},
								{ -5.0f, 20.0f, 8.0f },
                                {-5.0f,20.0f,-8.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
			//sc3
	
			{
        M3DVector3f vPoints[3] = {{-10, 24.0f, 8.0f},
									{-5.0f,20.0f,-8.0f },
								{ -10.0f, 24.0f, -8.0f }  };

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
			//sc4
		{
        M3DVector3f vPoints[3] = {{-10.0f, 20.0f, -8.0f},
								{-10.0f,24.0f,-8.0f },
								{ -5.0f, 20.0f, -8.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
	
	//tiang
		glColor3ub(107, 66, 38);
		//t1
		{
        M3DVector3f vPoints[3] = {{18.0f, 20.0f, 1.0f},
								{20.0f,20.0f,1.0f },
								{ 18.0f, 60.0f, 1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t2
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, 1.0f},
								{20.0f,60.0f,1.0f },
								{ 18.0f, 60.0f, 1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t3
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, 1.0f},
								{20.0f,20.0f,-1.0f },
								{ 20.0f, 60.0f, 1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t4
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, -1.0f},
								{20.0f,60.0f,-1.0f },
								{ 20.0f, 60.0f, 1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t5
		{
        M3DVector3f vPoints[3] = {{18.0f, 20.0f, -1.0f},
								{ 18.0f, 60.0f, -1.0f },
								{20.0f,20.0f,-1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t6
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, -1.0f},
								{ 18.0f, 60.0f, -1.0f },
								{20.0f,60.0f,-1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t7
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, 1.0f},
								{ 20.0f, 60.0f, 1.0f },
								{20.0f,20.0f,-1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//t8
		{
        M3DVector3f vPoints[3] = {{20.0f, 20.0f, -1.0f},
								{ 20.0f, 60.0f, 1.0f },
								{20.0f,60.0f,-1.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//layar
		glColor3ub(205, 179, 134);
		//l1
		{
        M3DVector3f vPoints[3] = {{19.0f, 40.0f, -20.0f},
								{ 19.0f, 59.0f, -10.0f },
								{19.0f,59.0f,10.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//l2
		{
        M3DVector3f vPoints[3] = {{19.0f, 40.0f, -20.0f},
								{19.0f,40.0f,20.0f },
								{ 19.0f, 59.0f, 10.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//l3
		{
        M3DVector3f vPoints[3] = {{19.0f, 40.0f, -20.0f},
								{19.0f,59.0f,10.0f },
								{ 19.0f, 59.0f, -10.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//l4
		{
        M3DVector3f vPoints[3] = {{19.0f, 40.0f, -20.0f},
								{ 19.0f, 59.0f, 10.0f },
								{19.0f,40.0f,20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//layarbawah
		//lb1
		{
        M3DVector3f vPoints[3] = {{19.0f, 25.0f, -20.0f},
								{ 19.0f, 39.0f, 20.0f },
								{19.0f,39.0f,-20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//lb2
		{
        M3DVector3f vPoints[3] = {{19.0f, 25.0f, -20.0f},
								{19.0f,25.0f,20.0f },
								{ 19.0f, 39.0f, 20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//lb3
		{
        M3DVector3f vPoints[3] = {{19.0f, 25.0f, -20.0f},
								{19.0f,39.0f,-20.0f },
								{ 19.0f, 39.0f, 20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//lb4
		{
        M3DVector3f vPoints[3] = {{19.0f, 25.0f, -20.0f},
								{ 19.0f, 39.0f, 20.0f },
								{19.0f,25.0f,20.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		

	glEnd();
   	// Restore the matrix state


	/* upper part*/
	//cube
	glColor3ub(107, 66, 38);
	glTranslatef(-18.0f, 16.0f, 0.0f);
	glutSolidCube(16.0f);
	glPopMatrix();
	glPushMatrix();
	glRotatef(xRot, -80.0f, 20.0f, 0.0f);
	glRotatef(yRot, -80.0f, 20.0f, 0.0f);
	glTranslatef(-61.0f, 60.2f, 0.0f);
	glutSolidCube(2.0f);
	glPopMatrix();



	/************************************first ship end********************************************/ 
	/***********************************second ship start******************************************/
	glPushMatrix();
	glRotatef(xRot, 80.0f, 10.0f, -50.0f);
	glRotatef(yRot, 80.0f, 10.0f, -50.0f);
	glTranslatef(80.0f, 10.0f, -50.0f);
	glColor3ub(128, 128, 128);
	glBegin(GL_TRIANGLES);
 
        //sisi1
		{
        M3DVector3f vPoints[3] = {{0.0f, 0.0f, 20.0f},
								{ -10.0f,30.0f,0.0f },
								{-25.0f, 0.0f, 6.78f }}; //ganti ©об╬ ╬ъ╦ч -,.-
        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi2
		{
        M3DVector3f vPoints[3] = {{ -10.0f,30.0f,0.0f },
									{0.0f, 0.0f, 20.0f },
                                  {0.0f, 30.0f, 5.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi3
		{
        M3DVector3f vPoints[3] = {{ 0.0f,0.0f,20.0f },
								{10.0f, 30.0f, 0.0f},
								{0.0f,30.0f,5.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//sisi4
		{
        M3DVector3f vPoints[3] = {{10.0f,30.0f,0.0f },
								{ 0.0f, 0.0f, 20.0f },                                
								{25.0f, 0.0f, 6.78f}}; //ganti

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisi5
		{
        M3DVector3f vPoints[3] = {{ -10.0f, 30.0f, 0.0f },
                                  {0.0f, 30.0f, 5.0f},
                                {10.0f,30.0f,0.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisi6
		{
		M3DVector3f vPoints[3] = {{-25.0f, 0.0f, 6.78f},
									{25.0f, 0.0f, 6.78f},
                                  {0.0f, 0.0f, 20.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisi7
		{
		M3DVector3f vPoints[3] = {{-25.0f, 0.0f, 6.78f},
									{-10.0f, 30.0f, 0.0f},
                                  {-25.0f, 0.0f, -10.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }
		//sisi8
		{
		M3DVector3f vPoints[3] = {{25.0f, 0.0f, 6.78f},
								{25.0f, 0.0f, -10.0f},
									{10.0f, 30.0f, 0.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
        }

		//upper part
		//up1
		{
        M3DVector3f vPoints[3] = {{ 10.0f, 30.0f, -70.0f },
									{-10.0f, 30.0f, 0.0f},
									 {10.0f,30.0f,0.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//up2
		{
        M3DVector3f vPoints[3] = {{ -10.0f, 30.0f, 0.0f },
									{10.0f,30.0f,-70.0f },
									{-10.0f, 30.0f, -70.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//up3
		{
        M3DVector3f vPoints[3] = {{ 10.0f, 30.0f, -70.0f },
									{0.0f,30.0f,-75.0f },
									{-10.0f, 30.0f, -70.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//back part
		//b1
		{
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, -95.0f },
									{-10.0f, 30.0f, -70.0f},
									{0.0f,30.0f,-75.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//b2
		{
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, -95.0f },
								{0.0f,30.0f,-75.0f },
									{10.0f, 30.0f, -70.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//b3
		{
        M3DVector3f vPoints[3] = {{-10.0f, 30.0f, -70.0f},
								{ 0.0f, 0.0f, -95.0f },									
								{-25.0f,0.0f,-83.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//b4
		{
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, -95.0f },
								{10.0f, 30.0f, -70.0f},																
								{25.0f,0.0f,-83.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//side part
		//s1
		{
        M3DVector3f vPoints[3] = {{ -10.0f, 30.0f, 0.0f },
								{-10.0f, 30.0f, -70.0f},
								{-25.0f,0.0f,-83.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//s2
		{
        M3DVector3f vPoints[3] = {{ -10.0f, 30.0f, 0.0f },
								{-25.0f,0.0f,-83.0f },
								{-25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//s3
		{
        M3DVector3f vPoints[3] = {{ 10.0f, 30.0f, 0.0f },
								{25.0f,0.0f,-83.0f },
								{10.0f, 30.0f, -70.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//s4
		{
        M3DVector3f vPoints[3] = {{ 10.0f, 30.0f, 0.0f },
								{25.0f, 0.0f, 6.78f},
								{25.0f,0.0f,-83.0f }};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//bottom part
		//bt1
		{
        M3DVector3f vPoints[3] = {{ 0.0f, 0.0f, -95.0f },
								{25.0f,0.0f,-83.0f },
								{-25.0f,0.0f,-83.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//bt2
		{
        M3DVector3f vPoints[3] = {{ -25.0f,0.0f,-83.0f},
								{25.0f,0.0f,-83.0f },
								{25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//bt3
		{
         M3DVector3f vPoints[3] = {{ -25.0f,0.0f,-83.0f},
								{25.0f,0.0f,6.78f },
								{-25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}

		//wingspart
		//w1
		{
         M3DVector3f vPoints[3] = {{ -25.0f,0.0f,-83.0f},
								{-40.0f, -30.0f, -83.0f},
								{-25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w2
		{
         M3DVector3f vPoints[3] = {{ -25.0f,0.0f,-83.0f},
								{-25.0f, 0.0f, 6.78f},
								{-40.0f, -30.0f, -83.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w3
		{
         M3DVector3f vPoints[3] = {{ -40.0f, -30.0f,6.78f},
								{-25.0f, 0.0f, 6.78f},
								{-40.0f, -30.0f, -83.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w4
		{
         M3DVector3f vPoints[3] = {{ -40.0f, -30.0f,6.78f},
								{-40.0f, -30.0f, -83.0f},
								{-25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w5
		{
         M3DVector3f vPoints[3] = {{ 25.0f,0.0f,-83.0f},
								{40.0f, -30.0f, -83.0f},
								{25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w6
		{
         M3DVector3f vPoints[3] = {{ 25.0f,0.0f,-83.0f},
								{25.0f, 0.0f, 6.78f},
								{40.0f, -30.0f, -83.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w7
		{
         M3DVector3f vPoints[3] = {{ 40.0f, -30.0f,6.78f},
								{25.0f, 0.0f, 6.78f},
								{40.0f, -30.0f, -83.0f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
		//w8
		{
         M3DVector3f vPoints[3] = {{ 40.0f, -30.0f,6.78f},
								{40.0f, -30.0f, -83.0f},
								{25.0f, 0.0f, 6.78f}};

        m3dFindNormal(vNormal, vPoints[0], vPoints[1], vPoints[2]);
        glNormal3fv(vNormal);
		glVertex3fv(vPoints[0]);
		glVertex3fv(vPoints[1]);
		glVertex3fv(vPoints[2]);
		}
	glEnd();

	glColor3ub(10, 10, 10);
	//cube
	glTranslatef(0.0f, 16.0f, 0.0f);
	glutSolidCube(18.0f);
	glPopMatrix();

	/***********************************second ship end******************************************/

	// Display the results
	glutSwapBuffers();
	}