// x,y,z - 'real' world (1024x1024x1024) // xangle,yangle,zangle - rotate object around its own axis // screenx, screeny, screenz - 'virtual pixel' offset in screen coords (1280x1024) void DrawShip(int ship, int x, int y, int z, int xangle, int yangle, int zangle, int screenx, int screeny) { int i; // Ships coded by Peter Hirschberger. Great work, Peter! // these numbers are scaled, so we should pre-scale and convert // to int. They're only reals because Peter's graphics package // uses reals. #define QUICK_HACK 1 #ifdef QUICK_HACK #define nNumVectors0 20 VERTEX vectors0[nNumVectors0*2] = { // front of ship - horizontal plane // vector 1 { -5.0, 0.0, 0.0 }, { -3.0, 0.0, 2.0 }, // vector 2 { -3.0, 0.0, 2.0 }, { -1.0, 0.0, 0.0 }, // vector 3 { -1.0, 0.0, 0.0 }, { -3.0, 0.0, -2.0 }, // vector 4 { -3.0, 0.0, -2.0 }, { -5.0, 0.0, 0.0 }, // front of ship - vertical plane // vector 5 { -5.0, 0.0, 0.0 }, { -3.0, 2.0, 0.0 }, // vector 6 { -3.0, 2.0, 0.0 }, { -1.0, 0.0, 0.0 }, // vector 7 { -1.0, 0.0, 0.0 }, { -3.0, -2.0, 0.0 }, // vector 8 { -3.0, -2.0, 0.0 }, { -5.0, 0.0, 0.0 }, // top of fuselage // vector 9 { -1.0, 0.0, 0.0 }, { 6.0, 0.0, 1.5 }, // vector 10 { -1.0, 0.0, 0.0 }, { 6.0, 1.0, 1.0 }, // vector 11 { -1.0, 0.0, 0.0 }, { 6.0, 1.0, -1.0 }, // vector 12 { -1.0, 0.0, 0.0 }, { 6.0, 0.0, -1.5 }, // rear of fuselage // vector 13 { 6.0, 0.0, 1.5 }, { 6.0, 1.0, 1.0 }, // vector 14 { 6.0, 1.0, 1.0 }, { 6.0, 1.0, -1.0 }, // vector 15 { 6.0, 1.0, -1.0 }, { 6.0, 0.0, -1.5 }, // vector 16 { 6.0, 0.0, -1.5 }, { 6.0, 0.0, 1.5 }, // right wing // vector 17 { 6.0, 0.0, 1.5 }, { 4.0, -2.0, 5.0 }, //4->7 // vector 18 { 4.0, -2.0, 5.0 }, //4->7 { -1.0, 0.0, 0.0 }, // left wing // vector 19 { 6.0, 0.0, -1.5 }, { 4.0, -2.0, -5.0 }, //4->7 // vector 20 { 4.0, -2.0, -5.0 }, //4->7 { -1.0, 0.0, 0.0 } }; #else // a square - simple object for debugging // next test would have been a cube but since it // worked OK we went straight to the ships #define nNumVectors0 4 VERTEX vectors0[nNumVectors0*2] = { // front of ship - horizontal plane // vector 1 { -5.0, -5.0, 0.0 }, { -5.0, 5.0, 0.0 }, // vector 2 { -5.0, 5.0, 0.0 }, { 5.0, 5.0, 0.0 }, // vector 3 { 5.0, 5.0, 0.0 }, { 5.0, -5.0, 0.0 }, // vector 4 { 5.0, -5.0, 0.0 }, { -5.0, -5.0, 0.0 } }; #endif #define nNumVectors1 21 VERTEX vectors1[nNumVectors1*2] = { // top of fuselage // vector 1 { -3.0, 0.0, 0.0 }, { -2.0, 0.0, 1.5 }, // vector 2 { -2.0, 0.0, 1.5 }, { 2.0, 0.0, 1.5 }, // vector 3 { 2.0, 0.0, 1.5 }, { 3.0, 0.0, 0.0 }, // vector 4 { 3.0, 0.0, 0.0 }, { 2.0, 0.0, -1.5 }, // vector 5 { 2.0, 0.0, -1.5 }, { -2.0, 0.0, -1.5 }, // vector 6 { -2.0, 0.0, -1.5 }, { -3.0, 0.0, 0.0 }, // right wing // vector 7 { 2.0, 0.0, 1.5 }, { 2.0, 0.8, 2.0 }, // vector 8 { 2.0, 0.8, 2.0 }, { 5.0, 0.8, 2.0 }, // vector 9 { 5.0, 0.8, 2.0 }, { 5.0, 0.0, 1.5 }, // vector 10 { 5.0, 0.0, 1.5 }, { 2.0, 0.0, 1.5 }, // left wing // vector 11 { 2.0, 0.0, -1.5 }, { 2.0, 0.8, -2.0 }, // vector 12 { 2.0, 0.8, -2.0 }, { 5.0, 0.8, -2.0 }, // vector 13 { 5.0, 0.8, -2.0 }, { 5.0, 0.0, -1.5 }, // vector 14 { 5.0, 0.0, -1.5 }, { 2.0, 0.0, -1.5 }, // bottom fuselage outline // vector 15 { 2.0, 0.0, -1.5 }, { -3.0, -0.9, -2.0 }, // vector 16 { -3.0, -0.9, -2.0 }, { -4.3, -1.16, 0.0 }, // vector 17 { -4.3, -1.16, 0.0 }, { -3.0, -0.9, 2.0 }, // vector 18 { -3.0, -0.9, 2.0 }, { 2.0, 0.0, 1.5 }, // window corner lines // vector 19 { -3.0, 0.0, 0.0 }, { -4.3, -1.16, 0.0 }, // vector 20 { -2.0, 0.0, 1.5 }, { -3.0, -0.9, 2.0 }, // vector 21 { -2.0, 0.0, -1.5 }, { -3.0, -0.9, -2.0 } }; #define nNumVectors2 17 VERTEX vectors2[nNumVectors2*2] = { // main fuselage // vector 1 { -5.0, 0.0, 0.0 }, { -2.0, 0.0, 3.0 }, // vector 2 { -2.0, 0.0, 3.0 }, { 1.0, 0.0, 0.0 }, // vector 3 { 1.0, 0.0, 0.0 }, { -2.0, 0.0, -3.0 }, // vector 4 { -2.0, 0.0, -3.0 }, { -5.0, 0.0, 0.0 }, // vector 5 { -5.0, 0.0, 0.0 }, { -2.0, 2.0, 0.0 }, // vector 6 { -2.0, 2.0, 0.0 }, { 1.0, 0.0, 0.0 }, // vector 7 { -2.0, 0.0, 3.0 }, { -2.0, 2.0, 0.0 }, // vector 8 { -2.0, 2.0, 0.0 }, { -2.0, 0.0, -3.0 }, // top fin // vector 9 { 1.0, 0.0, 0.0 }, { 5.0, 4.0, 0.0 }, // vector 10 { 5.0, 4.0, 0.0 }, { 5.0, 2.0, 0.0 }, // vector 11 { 5.0, 2.0, 0.0 }, { 1.0, 0.0, 0.0 }, // right fin // vector 12 { 1.0, 0.0, 0.0 }, { 5.0, -2.0, 5.0 }, // vector 13 { 5.0, -2.0, 5.0 }, { 5.0, -1.0, 2.0 }, // vector 14 { 5.0, -1.0, 2.0 }, { 1.0, 0.0, 0.0 }, // left fin // vector 15 { 1.0, 0.0, 0.0 }, { 5.0, -2.0, -5.0 }, // vector 16 { 5.0, -2.0, -5.0 }, { 5.0, -1.0, -2.0 }, // vector 17 { 5.0, -1.0, -2.0 }, { 1.0, 0.0, 0.0 } }; #define nNumVectors3 23 #define KEELX -4.5 #define KEELY -2.5 VERTEX vectors3[nNumVectors3*2] = { // cockpit // vector 1 { -9.25, 0.25, 0.0 }, { -7.0, 0.25, 3.0 }, // vector 2 { -7.0, 0.25, 3.0 }, { -2.0, 1.0, 0.0 }, // vector 3 { -2.0, 1.0, 0.0 }, { -7.0, 0.25, -3.0 }, // vector 4 { -7.0, 0.25, -3.0 }, { -9.25, 0.25, 0.0 }, // vector 5 { -9.25, 0.25, 0.0 }, { KEELX, KEELY, 0.0 }, // vector 6 { KEELX, KEELY, 0.0 }, { -2.0, 1.0, 0.0 }, // vector 7 { -7.0, 0.25, 3.0 }, { -6.0, 1.5, 2.25 }, // vector 8 { -7.0, 0.25, -3.0 }, { -6.0, 1.5, -2.25 }, // vector 9 { -7.0, 0.25, 3.0 }, { KEELX, KEELY, 0.0 }, // vector 10 { -7.0, 0.25, -3.0 }, { KEELX, KEELY, 0.0 }, // vector 11 { -6.0, 1.5, 2.25 }, { -6.0, 1.5, -2.25 }, // vector 12 { -6.0, 1.5, 2.25 }, { -2.0, 1.0, 0.0 }, // vector 13 { -6.0, 1.5, -2.25 }, { -2.0, 1.0, 0.0 }, // vector 14 { -7.0, 0.25, 3.0 }, { -7.0, 0.25, -3.0 }, // main fusalage // vector 15 { -2.0, 1.0, 0.0 }, { 11.0, -1.0, -2.0 }, // vector 16 { -2.0, 1.0, 0.0 }, { 11.0, -1.0, 2.0 }, // vector 17 { 11.0, -1.0, -2.0 }, { 11.0, -1.0, 2.0 }, // vector 18 { KEELX, KEELY, 0.0 }, { 11.0, -1.0, -2.0 }, // vector 19 { KEELX, KEELY, 0.0 }, { 11.0, -1.0, 2.0 }, // left wing // vector 20 { -2.0, 1.0, 0.0 }, { 9.0, 2.0, -9.0 }, // vector 21 { 9.0, 2.0, -9.0 }, { 11.0, -1.0, -2.0 }, // right wing // vector 22 { -2.0, 1.0, 0.0 }, { 9.0, 2.0, 9.0 }, // vector 23 { 9.0, 2.0, 9.0 }, { 11.0, -1.0, 2.0 }, }; int nvec[4] = {nNumVectors0,nNumVectors1,nNumVectors2,nNumVectors3}; VERTEX *pvec[4] = {vectors0, vectors1, vectors2, vectors3}; int nNumVectors = nvec[ship]; int nSCALE[4] = {20, 30, 20, 10}; int SCALE=nSCALE[ship]; for (i=0; i