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(); }
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(); }
// 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(); }
// 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(); }