/*************************************************************************** * Copyright (C) 2005 by Jeff Ferr * * root@sat * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "jframe.h" #ifndef PI # define PI 3.1415927 #endif #define MATRIX_SIZE (sizeof(float) * 9) typedef struct { float x, y, z; } Vertex; typedef struct { int a, b, c; } Triangle; typedef struct _Tri3D { Vertex *a, *b, *c; float depth; Vertex normal; struct _Tri3D *next; } Tri3D; #define FLAT_SHADED 0 #define WIRE_FRAME 1 #define AS_POINTS 2 void InitMatrix(void); void SetupMatrix(float Scale); void Rotate(int degree_tenths, char axis); void RotateLight(Vertex *light, int dx, int dy); void MultiplyVector(Vertex *V, Vertex *R); float CTM[9]; static float Scratch[9]; static float IdentityMatrix[9] = { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 }; static float Cosine[3600]; static float Sine[3600]; #define M_CLEAR(m) bzero(m, MATRIX_SIZE) #define M_IDENTITY(m) memcpy(m, IdentityMatrix, MATRIX_SIZE) static void MultiplyMatrix(float *A, float *B) { float tmp[3]; int row, column; /* make sure to compile with loop unrolling */ for(row = 0; row < 3; row++) { memcpy(tmp, A + (row * 3), sizeof(float) * 3); for(column = 0; column < 3; column++) { A[(row * 3) + column] = (tmp[0] * B[column + 0]) + (tmp[1] * B[column + 3]) + (tmp[2] * B[column + 6]); } } } void RotateLight(Vertex *light, int dx, int dy) { float matrix[9]; float X, Y, Z; M_IDENTITY(matrix); if(dx) { while(dx >= 3600) dx -= 3600; while(dx < 0) dx += 3600; M_CLEAR(Scratch); Scratch[4] = Cosine[dx]; Scratch[8] = Cosine[dx]; Scratch[5] = -Sine[dx]; Scratch[7] = Sine[dx]; Scratch[0] = 1.0; MultiplyMatrix(matrix, Scratch); } if(dy) { while(dy >= 3600) dy -= 3600; while(dy < 0) dy += 3600; M_CLEAR(Scratch); Scratch[0] = Cosine[dy]; Scratch[2] = Sine[dy]; Scratch[6] = -Sine[dy]; Scratch[8] = Cosine[dy]; Scratch[4] = 1.0; MultiplyMatrix(matrix, Scratch); } X = light->x; Y = light->y; Z = light->z; light->x = (X * matrix[0]) + (Y * matrix[1]) + (Z * matrix[2]); light->y = (X * matrix[3]) + (Y * matrix[4]) + (Z * matrix[5]); light->z = (X * matrix[6]) + (Y * matrix[7]) + (Z * matrix[8]); } void MultiplyVector(Vertex *V, Vertex *R) { float divisor; R->x = (V->x * CTM[0]) + (V->y * CTM[1]) + (V->z * CTM[2]); R->y = (V->x * CTM[3]) + (V->y * CTM[4]) + (V->z * CTM[5]); R->z = (V->x * CTM[6]) + (V->y * CTM[7]) + (V->z * CTM[8]); divisor = (R->z + 350.0) / 250.0; if(divisor < 0) divisor = -divisor; R->x *= divisor; R->y *= divisor; } void InitMatrix(void) { int i; for(i = 0; i < 3600; i++) { Cosine[i] = (float)cos(2.0 * PI * (double)i / 3600.0); Sine[i] = (float)sin(2.0 * PI * (double)i / 3600.0); } } void Scale(float x, float y, float z) { M_CLEAR(Scratch); Scratch[0] = x; Scratch[4] = y; Scratch[8] = z; MultiplyMatrix(CTM, Scratch); } void SetupMatrix(float scale) { M_IDENTITY(CTM); Scale(scale, -scale, scale); Rotate(1800, 'y'); } void Rotate(int degree_tenths, char axis) { while(degree_tenths >= 3600) degree_tenths -= 3600; while(degree_tenths < 0) degree_tenths += 3600; M_CLEAR(Scratch); switch(axis){ case 'x': Scratch[4] = Cosine[degree_tenths]; Scratch[8] = Cosine[degree_tenths]; Scratch[5] = -Sine[degree_tenths]; Scratch[7] = Sine[degree_tenths]; Scratch[0] = 1.0; break; case 'y': Scratch[0] = Cosine[degree_tenths]; Scratch[2] = Sine[degree_tenths]; Scratch[6] = -Sine[degree_tenths]; Scratch[8] = Cosine[degree_tenths]; Scratch[4] = 1.0; break; case 'z': Scratch[0] = Cosine[degree_tenths]; Scratch[1] = -Sine[degree_tenths]; Scratch[3] = Sine[degree_tenths]; Scratch[4] = Cosine[degree_tenths]; Scratch[8] = 1.0; break; } MultiplyMatrix(CTM, Scratch); } #define SKULL_VERTICIES 699 #define SKULL_TRIANGLES 1243 Vertex SkullVerticies[SKULL_VERTICIES] = { {-1.172920, 145.529144, 36.591091 }, {-10.826810, 148.175262, 80.638802 }, {-21.895691, 145.529099, 76.836258 }, {-25.020229, 144.867538, 68.092613 }, {-26.328239, 144.205978, 58.549660 }, {-28.314400, 143.544434, 50.750599 }, {-28.484011, 141.559875, 42.152271 }, {-29.525579, 140.236832, 33.214840 }, {-29.767851, 138.913727, 26.093950 }, {-27.927139, 137.590637, 18.779289 }, {-21.436100, 136.267593, 7.250180 }, {-13.225320, 136.929123, 2.914600 }, {-0.582150, 137.590668, -1.203020 }, {-16.955379, 134.282944, -5.562600 }, {-0.679120, 134.944458, -11.278830 }, {-21.460569, 128.990601, -22.371731 }, {-0.485490, 130.313721, -27.264490 }, {-33.425880, 116.421387, -56.135269 }, {-0.267850, 116.421379, -67.834152 }, {-36.526260, 110.467506, -71.394310 }, {-0.122710, 106.498306, -88.857750 }, {-43.623100, 95.913651, -95.736008 }, {0.167750, 87.975151, -112.836220 }, {-25.845409, 65.482803, -125.963661 }, {0.022280, 64.159737, -127.949959 }, {-48.685509, 64.821281, -125.309517 }, {-49.654430, 31.744280, -135.724335 }, {-27.734739, 27.775049, -141.755478 }, {0.748770, 24.467350, -142.724640 }, {-51.955490, 9.913470, -149.166885 }, {-25.942511, -3.978870, -154.108078 }, {0.918260, -0.009640, -152.194824 }, {-73.875031, 23.144251, -125.067039 }, {-75.183022, 5.282680, -134.610001 }, {-68.377007, -2.655800, -140.495712 }, {-60.505360, -5.301960, -143.959335 }, {-49.145851, -8.609650, -146.066589 }, {-16.254120, -27.794319, -140.302338 }, {1.112030, -26.471230, -150.111877 }, {-9.448150, -39.040501, -146.188110 }, {1.354150, -50.948219, -161.059708 }, {-12.185130, -48.963600, -150.765717 }, {-21.195200, -16.548140, -148.246704 }, {-33.644588, -16.548140, -142.046097 }, {-46.893269, -17.871220, -137.662018 }, {-36.429901, -25.148161, -133.593018 }, {-12.911780, -54.917450, -154.059799 }, {-8.116150, -60.871319, -161.229172 }, {-12.621190, -62.855949, -159.969681 }, {-12.403230, -71.455963, -164.402054 }, {-7.559100, -68.148262, -166.533508 }, {0.966570, -58.886688, -165.225662 }, {-5.936340, -75.425209, -169.415802 }, {1.063390, -73.440582, -173.218491 }, {1.184520, -65.502113, -169.658035 }, {-1.794540, -82.040619, -163.287918 }, {1.378340, -83.363678, -167.574997 }, {-7.171540, -82.702164, -162.367538 }, {-12.330580, -78.071373, -165.879517 }, {-13.347820, -87.332932, -163.263672 }, {-13.008580, -47.640530, -146.066940 }, {-14.946280, -56.902069, -148.828094 }, {-17.077730, -68.809807, -153.672211 }, {-18.070810, -80.056007, -157.571686 }, {-33.160061, -37.717430, -127.804382 }, {-16.738501, -38.378960, -136.475525 }, {-18.627689, -48.302059, -134.198715 }, {-18.869970, -60.209770, -141.319641 }, {-33.838219, -50.286690, -126.060471 }, {-26.693159, -55.578999, -132.818085 }, {-40.620022, -64.840561, -126.690163 }, {-31.464640, -63.517490, -132.164093 }, {-18.942739, -86.671387, -157.910797 }, {-16.714470, -93.948334, -161.059540 }, {-60.723301, -13.901990, -139.526993 }, {-79.881844, -11.255820, -135.433517 }, {-97.998802, -9.932740, -122.402588 }, {-95.673561, 4.621140, -115.475487 }, {-92.597504, 13.221150, -111.769722 }, {-89.133881, 30.421181, -103.898003 }, {-72.203781, 33.728901, -122.911377 }, {-20.056829, -78.071373, -147.302124 }, {-20.589710, -82.702171, -148.513214 }, {-22.866461, -93.948334, -150.402344 }, {-19.354481, -97.256042, -155.561371 }, {-26.499550, -104.532967, -148.803802 }, {-27.516790, -93.948341, -146.187958 }, {-31.028740, -95.271423, -141.028931 }, {-35.679100, -112.471474, -136.814499 }, {-29.454460, -117.102226, -148.949036 }, {-25.627600, -115.779152, -148.464676 }, {-24.271240, -103.871429, -151.952423 }, {-24.707170, -77.409813, -143.087677 }, {-23.447651, -62.855961, -138.582672 }, {-38.658161, -82.040619, -130.444366 }, {-50.623169, -76.086739, -128.070694 }, {-41.346649, -90.640633, -129.984131 }, {-44.035141, -107.179123, -129.523895 }, {-46.190769, -130.333054, -127.852722 }, {-35.557949, -131.656158, -133.253967 }, {-30.617010, -132.979202, -143.378342 }, {-34.685989, -136.948471, -132.914886 }, {-34.395401, -142.902344, -138.824799 }, {-46.263439, -144.886917, -126.375267 }, {-39.869209, -144.225403, -129.911499 }, {-14.970450, -138.933090, -142.312729 }, {-25.457991, -140.917679, -139.866394 }, {-22.672680, -150.179276, -148.319458 }, {-13.589940, -148.856140, -152.315903 }, {-4.676680, -138.933105, -146.842087 }, {-8.067670, -148.194611, -156.191299 }, {1.790220, -140.917648, -151.855820 }, {1.741710, -149.517685, -156.893799 }, {-8.091830, -156.794662, -149.675919 }, {1.935500, -156.794601, -154.810867 }, {-6.008840, -164.071594, -149.869736 }, {1.596420, -162.748444, -153.938843 }, {-25.990870, -158.779282, -141.077469 }, {-17.441000, -166.056259, -146.284973 }, {-27.662090, -148.194656, -143.233047 }, {-32.046001, -155.471603, -138.413086 }, {-34.468060, -159.440842, -137.347366 }, {-32.772640, -165.394684, -141.707077 }, {-34.976761, -173.994720, -145.073807 }, {-28.340260, -165.394684, -141.489151 }, {-29.599770, -175.979355, -145.994186 }, {-24.489201, -175.979324, -147.520126 }, {-23.689899, -168.702408, -145.703613 }, {-40.062988, -156.133118, -131.994537 }, {1.596410, -173.333115, -153.938858 }, {-7.680090, -173.994629, -152.025299 }, {-17.295670, -174.656250, -149.239868 }, {-48.419071, -154.148514, -124.704041 }, {-44.713310, -155.471588, -127.780083 }, {-46.723652, -164.071594, -129.063736 }, {-37.495651, -164.071609, -136.015259 }, {-46.578350, -170.687027, -132.018677 }, {-48.685490, -164.071579, -125.309517 }, {-38.488689, -176.640869, -139.914703 }, {-46.505699, -175.979340, -133.496140 }, {-49.484791, -170.687027, -127.126099 }, {-52.657669, -163.410065, -122.838997 }, {-52.052139, -142.902313, -123.105408 }, {-52.875599, -151.502319, -118.406563 }, {-55.225021, -162.748505, -118.818321 }, {-56.436039, -170.025452, -118.285454 }, {-60.941090, -138.271500, -117.025940 }, {-61.764561, -150.179276, -112.327133 }, {-61.159061, -164.733139, -112.593582 }, {-60.480869, -170.025452, -114.337463 }, {-60.480869, -173.994690, -114.337433 }, {-56.968899, -175.317780, -119.496483 }, {-48.879269, -177.302429, -127.392509 }, {-53.796040, -175.979324, -123.783577 }, {-53.190529, -170.687012, -124.050041 }, {-52.585018, -104.532990, -124.316452 }, {-50.284088, -86.671387, -128.942566 }, {-39.844879, -52.932850, -118.358223 }, {-46.287601, -65.502129, -119.859879 }, {-37.834541, -42.348202, -117.074547 }, {-39.384659, -30.440500, -115.669746 }, {-53.335819, -74.102150, -121.095016 }, {-45.149220, -25.809700, -118.915260 }, {-54.813301, -20.517389, -121.167679 }, {-66.972069, -15.886610, -120.876938 }, {-78.065147, -14.563530, -118.164124 }, {-86.808777, -16.548161, -115.039597 }, {-98.652649, -27.794331, -109.105408 }, {-104.417191, -21.178930, -112.350929 }, {-111.077873, -11.917370, -109.420143 }, {-110.205917, -5.963510, -109.081070 }, {-108.025970, 1.313420, -99.199051 }, {-120.693314, -12.578910, -88.566063 }, {-111.368477, -5.301970, -103.510323 }, {-119.700401, -23.163561, -102.735168 }, {-105.288849, 35.713501, -76.552727 }, {-71.888863, 48.944321, -117.267982 }, {-63.484138, 82.021301, -101.451950 }, {-86.614861, 59.528961, -94.887978 }, {-114.637711, 60.190460, -37.024490 }, {-119.239891, 19.174990, -63.909431 }, {-112.022476, -47.640541, -108.281822 }, {-104.974243, -46.979012, -107.046623 }, {-71.355988, -130.994598, -116.057060 }, {-62.612331, -130.333038, -119.181549 }, {-63.145210, -117.102249, -120.392593 }, {-63.217690, -162.087021, -100.846519 }, {-64.888947, -175.979355, -103.002136 }, {-62.878620, -152.825439, -101.718460 }, {-67.262543, -144.225403, -96.898521 }, {-64.719330, -158.779282, -94.403809 }, {-65.325020, -143.563873, -112.206017 }, {-69.079224, -135.625381, -114.167824 }, {-67.165558, -142.902313, -86.822708 }, {-65.082573, -154.810013, -87.016479 }, {-66.729683, -172.010117, -95.687477 }, {-68.037483, -170.687012, -87.161774 }, {-127.087563, -21.840481, -85.029839 }, {-126.700150, -30.440500, -98.932541 }, {-130.405899, -37.717442, -95.856468 }, {-134.620163, -35.071289, -82.438141 }, {-150.823578, -68.809837, -60.130741 }, {-147.408478, -56.240582, -57.296970 }, {-148.764648, -74.763702, -35.740540 }, {-143.993332, -27.132811, -54.463161 }, {-135.273819, -3.317380, -51.072319 }, {-124.689346, 27.113470, -43.442890 }, {-130.066208, 36.375019, -24.453800 }, {-145.373520, 6.605720, -8.322730 }, {-147.965179, -32.425171, -15.855340 }, {-146.632996, -50.948280, -12.827770 }, {-146.172974, -59.548290, -28.207920 }, {-98.458397, 78.052063, -52.816502 }, {-73.995712, 93.267479, -74.421547 }, {-128.201004, 62.175072, -2.146560 }, {-56.047878, 116.421387, -41.844879 }, {-65.663628, 106.498283, -57.128059 }, {-78.258003, 117.082901, -11.835250 }, {-92.330322, 103.190536, -20.821020 }, {-103.447678, 87.975159, -29.661461 }, {-37.664181, 127.667511, -18.132980 }, {-28.847731, 132.959869, -4.666340 }, {-44.615292, 132.298309, 8.776280 }, {-59.293091, 127.667503, 0.056950 }, {-47.206810, 134.944443, 19.312300 }, {-67.673347, 127.667526, 13.862820 }, {-85.717850, 117.082909, 7.347610 }, {-100.686211, 105.836723, 4.538120 }, {-115.993736, 87.313591, 2.600590 }, {-45.777672, 137.590637, 32.415680 }, {-45.559570, 140.236801, 46.051941 }, {-42.047459, 142.882904, 58.961540 }, {-40.739471, 143.544464, 68.504494 }, {-75.666039, 128.329071, 31.834641 }, {-91.651711, 118.405960, 31.641020 }, {-146.729492, -38.379021, 31.302320 }, {-153.099945, -58.225208, -7.814020 }, {-148.255951, -70.794472, -28.014139 }, {-145.591629, -83.363777, -21.959009 }, {-138.059158, -95.271439, -42.619308 }, {-151.719086, -63.517551, 18.320080 }, {-142.103317, -64.179108, 33.603249 }, {-145.809174, -71.456039, 18.610661 }, {-151.622284, -75.425278, 10.327250 }, {-149.854279, -80.056068, 4.490040 }, {-150.411057, -9.271260, 27.863041 }, {-144.961487, 35.713459, 25.465179 }, {-133.141754, 62.175049, 26.046379 }, {-120.716553, 88.636658, 26.361139 }, {-105.142639, 109.805931, 28.904200 }, {-138.688110, -68.148338, 54.505692 }, {-136.847061, -72.779137, 83.328323 }, {-144.355301, -33.086731, 97.473244 }, {-128.805618, -76.086838, 106.531639 }, {-130.792038, -111.809982, 62.595310 }, {-124.688560, -97.256111, 46.900261 }, {-124.640053, -119.086929, 51.938148 }, {-118.754562, -108.502281, 40.675491 }, {-106.474800, -93.948402, 25.876551 }, {-108.049057, -74.763741, 33.796730 }, {-123.671333, -72.779137, 44.284420 }, {-149.514359, -5.963590, 93.961311 }, {-148.618271, 20.498011, 87.785027 }, {-144.161697, 42.990391, 81.487617 }, {-134.594650, 69.452003, 73.664284 }, {-120.667740, 94.590500, 67.536324 }, {-103.519539, 114.436691, 62.159191 }, {-89.398911, 123.698288, 58.114208 }, {-75.617378, 131.636703, 54.941200 }, {-71.669220, 134.944443, 77.054672 }, {-64.330223, 137.590607, 90.448631 }, {-36.355412, 145.529099, 81.753166 }, {-52.631512, 140.236771, 105.538017 }, {-82.568512, 128.329041, 81.850456 }, {-99.595573, 115.098228, 90.788010 }, {-111.172997, 101.867416, 97.327698 }, {-124.784889, 75.405838, 109.099052 }, {-133.964462, 46.959599, 121.088364 }, {-138.154572, -3.317440, 127.991287 }, {-134.666779, -31.763670, 129.347656 }, {-121.563423, -78.071480, 127.918457 }, {-120.812737, -91.302254, 106.628464 }, {-110.446320, -107.840759, 100.621628 }, {-107.491241, -101.225357, 118.835579 }, {-114.854736, -125.702347, 75.819702 }, {-107.007332, -131.656189, 60.802792 }, {-101.848473, -131.656189, 46.246090 }, {-114.201019, -121.071564, 44.453861 }, {-94.824539, -125.702316, 35.928020 }, {-100.346970, -101.886879, 21.734751 }, {-93.419281, -124.379272, 91.684036 }, {-84.893707, -131.656219, 74.923233 }, {-79.468399, -136.948502, 60.972080 }, {-80.267868, -134.302338, 41.086910 }, {-79.831337, -125.040817, 104.496674 }, {-79.831337, -124.379257, 104.496674 }, {-69.222847, -138.271591, 87.542122 }, {-65.638367, -144.225525, 62.836941 }, {-63.700851, -145.548508, 47.529449 }, {80.727257, -136.286942, 62.036411 }, {81.405251, -133.640778, 42.223881 }, {64.523514, -144.886963, 48.206539 }, {66.412880, -143.563889, 63.998428 }, {85.377739, -130.994659, 75.890617 }, {69.949280, -137.610092, 88.461288 }, {93.443398, -123.056183, 92.578644 }, {80.364326, -124.379257, 105.561028 }, {110.470627, -106.517700, 101.709663 }, {106.910362, -99.902290, 119.899437 }, {102.477348, -130.333069, 47.406940 }, {115.532532, -124.379250, 77.077179 }, {95.864998, -124.379227, 37.306969 }, {107.660683, -130.333130, 62.472172 }, {114.708763, -119.748451, 45.638729 }, {119.625526, -107.179199, 42.029812 }, {107.321274, -92.625298, 27.206850 }, {125.293266, -117.763863, 53.268150 }, {101.023880, -100.563782, 22.750299 }, {131.566467, -110.486900, 64.240067 }, {137.064789, -71.456062, 84.948753 }, {120.522247, -89.979179, 108.128059 }, {128.515076, -74.763763, 108.224907 }, {121.249046, -76.748383, 129.490692 }, {133.335190, -30.440580, 130.677444 }, {143.459229, -31.763639, 99.481110 }, {136.629181, -1.994350, 129.950821 }, {148.375916, -3.978950, 95.872177 }, {142.780807, 44.313480, 83.156418 }, {147.794601, 22.482651, 89.623299 }, {131.954544, 48.282700, 122.612053 }, {123.065437, 76.728928, 110.622833 }, {132.801849, 70.775047, 75.260567 }, {122.119186, -129.671494, -86.993896 }, {121.925529, -125.040749, -71.008186 }, {133.333557, -115.779182, -68.077599 }, {119.189781, 95.913589, 68.963303 }, {109.138443, 103.190514, 98.682167 }, {101.678162, 115.759789, 63.659111 }, {97.342903, 116.421310, 91.585609 }, {80.315666, 128.990601, 82.454582 }, {87.387932, 124.359818, 59.105740 }, {73.630547, 132.298325, 55.763409 }, {69.585869, 135.605988, 77.780060 }, {33.836182, 146.190659, 81.946342 }, {38.316879, 144.206024, 69.133560 }, {61.811138, 138.252182, 91.319504 }, {49.531399, 140.898315, 106.118446 }, {22.670321, 144.867554, 68.067993 }, {24.317230, 144.206009, 58.670319 }, {39.697380, 143.544495, 59.130390 }, {43.572578, 140.898361, 46.584042 }, {73.581902, 128.990601, 32.656879 }, {90.173088, 119.729042, 32.584080 }, {43.959999, 138.252182, 32.681351 }, {103.615562, 111.129021, 30.282990 }, {119.140984, 89.959763, 27.788099 }, {132.171738, 63.498150, 27.836439 }, {144.064087, 37.036541, 26.940161 }, {150.167770, -7.286620, 29.313709 }, {146.728394, -37.055931, 32.995281 }, {124.179047, -71.456047, 45.808208 }, {138.784210, -66.825287, 56.004990 }, {142.756226, -62.856010, 35.465832 }, {108.701942, -73.440659, 35.272320 }, {146.171219, -70.132927, 20.230970 }, {125.244766, -95.933022, 48.230259 }, {152.081100, -61.532902, 20.521580 }, {84.553703, 117.744453, 8.314980 }, {99.473618, 107.159798, 6.086540 }, {115.265480, 88.636681, 4.197190 }, {127.642227, 63.498150, -0.525960 }, {145.129501, 7.928810, -6.775080 }, {152.783386, -73.440628, 12.262310 }, {153.994247, -56.240589, -6.339180 }, {149.634384, -68.809830, -26.103251 }, {146.994400, -82.040672, -20.605150 }, {150.724564, -78.071411, 5.940730 }, {149.731155, -72.779083, -34.096069 }, {139.413086, -93.948341, -41.119999 }, {147.284927, -58.225189, -26.514959 }, {147.430450, -49.625198, -11.401250 }, {148.447678, -30.440519, -14.017100 }, {86.926498, -139.594620, -88.131927 }, {74.888947, -140.256149, -66.212120 }, {97.462639, -136.286911, -67.471779 }, {104.559242, -135.625336, -79.267326 }, {108.628517, -113.794571, -53.593410 }, {122.627983, -116.440727, -61.198818 }, {113.617638, -134.302246, -94.817093 }, {66.460869, 128.329086, 14.830510 }, {45.485790, 135.606049, 19.723270 }, {26.157940, 143.544495, 51.355659 }, {26.593849, 141.559906, 42.490891 }, {27.635250, 140.236801, 33.359669 }, {28.264940, 138.913727, 26.577869 }, {102.961082, 89.298241, -28.694401 }, {114.272110, 61.513550, -35.839619 }, {91.577423, 104.513634, -20.071739 }, {76.899773, 117.744438, -10.722420 }, {57.983490, 128.329102, 0.491930 }, {43.039410, 132.959885, 9.235730 }, {26.278780, 137.590637, 18.778820 }, {36.354279, 128.329056, -17.455429 }, {55.585300, 117.082901, -41.094990 }, {27.707600, 132.959900, -4.255070 }, {19.739080, 136.267593, 7.201390 }, {11.358690, 136.929153, 2.938620 }, {15.621460, 134.282990, -5.441780 }, {20.586559, 128.990601, -22.081450 }, {32.599720, 117.082916, -55.554550 }, {73.774727, 93.929031, -73.671997 }, {65.515640, 107.159828, -56.305660 }, {36.014721, 111.129059, -70.789398 }, {97.874542, 79.375130, -51.752468 }, {129.942947, 37.698109, -23.220770 }, {149.004410, -54.255939, -55.458721 }, {135.949326, -86.671402, -67.060310 }, {137.208878, -76.748299, -62.555302 }, {133.890549, -78.732910, -73.381927 }, {131.516815, -105.856041, -85.346909 }, {138.371429, -101.886833, -68.126060 }, {128.925125, -95.271400, -92.879501 }, {44.031559, 96.575203, -95.276588 }, {64.134697, 82.682838, -100.508438 }, {87.217079, 60.190510, -94.041710 }, {124.638474, 28.436560, -41.846439 }, {119.745720, 20.498079, -62.821529 }, {145.032242, -25.809719, -52.988152 }, {135.683044, -1.994280, -49.597191 }, {122.119164, -11.255820, -86.993813 }, {128.755676, -20.517389, -83.409203 }, {135.731216, -33.748199, -80.696564 }, {145.952332, -59.548248, -83.748459 }, {152.104630, -66.825203, -58.268349 }, {131.129242, -80.056000, -89.512863 }, {122.990936, -86.009857, -104.723419 }, {119.842262, -72.779053, -106.951683 }, {117.710747, -78.732903, -111.795807 }, {130.305786, -68.148277, -84.814034 }, {121.029083, -21.840460, -100.969131 }, {128.271103, -29.117390, -97.650978 }, {131.952667, -36.394348, -94.211662 }, {123.766083, -52.932861, -96.391502 }, {121.901047, -41.686668, -100.630081 }, {120.544746, -116.440697, -97.142326 }, {113.108917, -121.071503, -102.543480 }, {118.752350, -105.856056, -102.858383 }, {116.233292, -95.271393, -111.868446 }, {113.036118, -84.686768, -119.134659 }, {69.754128, -152.825424, -76.239433 }, {68.179680, -154.148529, -86.387878 }, {71.134598, -170.025436, -86.242592 }, {71.643333, -170.025452, -78.516212 }, {72.588074, -162.086975, -61.585930 }, {72.927147, -149.517715, -62.457870 }, {71.643318, -140.917679, -78.516197 }, {69.923592, -142.240784, -85.709717 }, {103.348061, -136.286850, -96.803093 }, {90.607918, -139.594559, -102.761238 }, {91.431358, -136.948441, -107.460083 }, {106.932640, -132.979172, -103.439583 }, {67.937424, -158.117752, -93.508797 }, {69.487534, -171.348511, -94.913597 }, {66.484123, -161.425400, -100.096802 }, {68.373322, -175.317749, -102.373558 }, {70.432114, -143.563873, -96.051971 }, {107.877068, -91.963722, -122.646584 }, {108.918663, -101.886803, -113.709152 }, {111.582970, -111.809914, -107.654022 }, {108.482811, -125.702263, -104.844398 }, {93.586983, -130.994568, -109.131348 }, {92.206337, -108.502243, -117.196808 }, {98.164642, -116.440666, -111.868294 }, {74.331482, -130.333054, -115.113693 }, {82.396950, -115.117638, -116.494301 }, {72.175858, -134.963821, -113.442436 }, {65.611992, -129.671524, -118.504517 }, {63.722839, -137.610016, -116.227737 }, {67.937271, -142.902298, -111.577438 }, {64.982330, -149.517700, -111.722717 }, {65.951263, -152.163849, -101.307831 }, {64.110390, -164.071564, -112.061813 }, {63.577492, -169.363907, -113.272827 }, {64.183037, -173.333160, -113.539268 }, {113.932381, -46.317459, -107.242264 }, {114.416763, -63.517502, -111.069153 }, {103.783737, -85.348343, -123.736481 }, {111.679779, -74.763672, -115.646828 }, {94.216667, -80.055992, -115.913132 }, {102.451752, -63.517509, -108.695396 }, {88.888031, -96.594498, -128.023392 }, {88.016090, -89.979103, -128.362488 }, {49.456741, -129.671494, -127.296494 }, {65.951088, -116.440697, -119.376457 }, {76.874542, -95.271400, -130.687576 }, {78.012917, -88.656013, -129.742966 }, {67.065147, -84.686768, -129.985107 }, {69.051323, -102.548363, -122.186073 }, {81.331192, -82.040627, -118.916359 }, {105.818398, -19.855841, -110.899490 }, {100.635223, -26.471239, -107.896111 }, {66.895683, -78.732903, -120.514832 }, {88.500580, -76.748306, -114.120728 }, {106.738869, -45.655899, -105.522537 }, {112.793999, -10.594280, -108.186836 }, {49.311440, 65.482819, -124.341461 }, {105.552269, 37.036579, -75.367722 }, {109.330544, 2.636510, -97.989899 }, {90.002357, 31.744280, -102.494751 }, {73.483688, 34.390450, -121.968071 }, {72.926659, 49.605869, -116.663727 }, {51.031010, 32.405819, -135.216537 }, {97.098923, 5.944230, -114.290298 }, {93.659668, 14.544240, -110.608772 }, {112.503403, -3.978880, -102.276993 }, {111.583000, -4.640420, -107.653976 }, {99.811577, -8.609670, -121.265907 }, {88.500580, -15.886610, -114.120697 }, {79.781097, -13.902000, -117.511520 }, {81.791313, -10.594270, -134.296463 }, {68.639587, -15.225080, -119.836617 }, {56.819881, -19.855841, -120.417824 }, {62.463139, -13.240440, -138.801346 }, {46.937881, -25.148161, -118.237839 }, {48.754261, -17.209681, -137.105804 }, {38.194069, -24.486610, -133.181976 }, {41.149151, -29.778950, -114.968040 }, {57.110489, -93.286774, -126.327698 }, {52.750759, -86.009827, -128.023102 }, {53.017181, -75.425194, -127.417587 }, {55.342430, -73.440613, -120.490479 }, {48.487968, -64.840584, -119.642723 }, {42.868729, -64.179039, -125.843147 }, {34.948528, -37.055889, -127.417412 }, {39.744331, -41.686661, -116.518158 }, {41.899960, -52.271309, -118.189392 }, {35.747841, -49.625141, -125.600861 }, {41.003700, -81.379066, -130.081772 }, {44.225052, -89.979073, -129.330933 }, {46.574459, -106.517593, -128.919250 }, {55.487740, -103.871429, -123.445442 }, {52.411690, -176.640869, -127.151176 }, {52.678101, -170.025452, -126.545670 }, {50.013760, -175.317795, -132.600815 }, {57.231640, -175.317780, -122.767281 }, {56.965199, -170.025452, -123.372803 }, {56.020599, -162.748505, -122.234428 }, {59.629532, -169.363907, -117.317650 }, {60.307671, -174.656235, -119.061546 }, {58.491131, -162.086990, -118.262268 }, {55.802662, -150.840790, -117.802010 }, {55.148651, -142.240753, -122.573486 }, {51.660851, -153.486969, -123.929817 }, {49.384109, -144.225403, -125.819023 }, {49.941120, -170.025452, -131.123367 }, {51.999939, -163.410065, -124.801758 }, {50.401329, -163.410065, -128.434906 }, {40.688782, -163.410065, -135.725235 }, {42.045120, -175.979309, -139.212997 }, {36.207901, -164.733109, -140.981079 }, {38.775261, -173.333145, -145.001694 }, {43.425739, -155.471588, -131.147537 }, {47.979271, -154.810028, -127.369118 }, {38.072929, -158.779266, -136.742447 }, {42.747601, -143.563843, -129.403610 }, {37.273621, -142.240753, -138.558990 }, {21.191019, -174.656219, -148.828400 }, {28.505680, -175.979294, -146.987747 }, {26.955570, -168.702347, -145.582916 }, {21.045710, -166.056183, -145.873550 }, {9.976810, -164.071548, -149.676132 }, {11.260510, -173.994629, -151.686432 }, {35.457100, -154.810028, -137.759689 }, {29.692530, -158.779266, -141.005219 }, {31.775499, -164.733109, -141.199020 }, {33.470951, -175.317764, -145.558746 }, {30.976210, -148.194641, -143.015533 }, {11.454280, -156.794617, -149.603409 }, {25.889811, -150.179199, -148.005020 }, {28.747950, -140.917709, -139.866821 }, {16.903919, -148.856094, -152.001312 }, {11.478460, -148.194580, -156.118744 }, {37.854988, -136.286880, -132.310059 }, {33.931141, -132.317673, -142.870224 }, {32.744282, -116.440689, -148.852737 }, {28.844749, -115.779137, -147.859665 }, {8.354050, -138.933105, -146.793777 }, {18.478340, -138.933105, -141.852875 }, {38.460510, -130.994568, -132.576492 }, {38.944881, -111.809891, -136.403366 }, {33.519409, -94.609863, -140.520798 }, {27.415770, -77.409828, -142.894394 }, {30.516010, -93.948303, -145.704010 }, {33.689018, -62.855949, -131.922501 }, {25.720381, -62.855961, -138.534683 }, {28.990210, -55.578999, -132.745956 }, {20.464510, -48.302078, -134.053741 }, {21.094191, -60.209770, -140.835587 }, {22.595831, -78.071358, -147.278320 }, {23.540400, -82.702141, -148.416718 }, {25.696030, -93.948311, -150.087921 }, {21.021391, -80.055977, -157.426743 }, {21.626900, -86.671387, -157.693192 }, {22.692640, -97.256027, -155.271149 }, {27.246161, -103.871422, -151.492722 }, {29.450251, -104.532959, -148.126129 }, {19.422779, -93.948318, -161.059860 }, {19.931480, -68.809799, -153.333450 }, {17.630581, -56.902069, -148.707291 }, {75.372864, 23.805811, -124.244858 }, {77.019829, 5.944230, -133.642517 }, {69.923119, -1.994250, -139.915543 }, {62.075581, -4.640410, -142.967300 }, {50.934040, -7.948110, -145.292343 }, {16.274071, -87.332916, -163.288147 }, {15.208340, -78.071350, -165.710175 }, {18.793280, -38.378960, -136.209427 }, {15.135710, -71.455963, -164.232727 }, {15.135870, -47.640518, -146.164001 }, {18.405701, -27.794310, -140.375336 }, {14.917740, -62.855949, -159.800293 }, {15.232670, -54.917450, -154.156906 }, {14.748300, -48.963600, -150.330002 }, {11.575430, -39.040489, -146.042877 }, {10.291570, -82.702141, -162.101242 }, {10.824430, -60.871311, -160.890335 }, {10.509520, -68.148270, -166.533661 }, {8.571840, -75.425194, -169.294800 }, {4.720820, -82.040604, -163.263840 }, {27.657869, -3.978870, -153.842178 }, {22.934910, -16.548130, -148.150208 }, {35.941460, -15.886600, -141.586533 }, {53.767830, 10.575010, -148.707504 }, {29.426100, 27.775049, -141.610657 }, {26.277531, 65.482803, -125.770302 }, {19.279490, 145.529129, 76.787453 }, {8.113780, 148.175262, 80.977730 }, {-1.051970, 149.498322, 84.892319 }, {-112.410027, -64.840591, -112.447746 }, {-100.396538, -64.840591, -109.783600 }, {-120.039467, -43.009762, -101.863258 }, {-122.001312, -54.255939, -98.109001 }, {-128.492340, -69.471367, -86.579910 }, {-117.932343, -74.102142, -108.572403 }, {-144.550674, -60.871342, -85.296120 }, {-135.225494, -78.071388, -64.103073 }, {-134.402039, -87.994499, -68.801910 }, {-136.412369, -103.209938, -70.085587 }, {-128.879929, -81.379089, -90.745934 }, {-132.028458, -80.056030, -74.905540 }, {-120.427032, -87.332939, -106.029213 }, {-126.918060, -96.594543, -94.500122 }, {-131.108032, -117.102272, -69.528603 }, {-129.364304, -107.179138, -86.919067 }, {-120.184471, -117.763802, -62.771099 }, {-106.645020, -115.117638, -54.996368 }, {-95.309860, -137.610016, -68.656952 }, {-119.409477, -126.363853, -72.507812 }, {-101.849541, -136.948456, -80.234390 }, {-119.215858, -130.994583, -88.493469 }, {-117.835358, -117.763786, -98.496613 }, {-110.859756, -135.625381, -95.783989 }, {-110.762962, -122.394577, -103.776802 }, {-109.503609, -76.086761, -117.340363 }, {-92.040482, -81.379112, -117.074142 }, {-86.203278, -77.409843, -115.306084 }, {-115.631393, -80.056023, -113.198593 }, {-110.835762, -86.009880, -120.367973 }, {-114.153938, -96.594543, -113.125931 }, {-101.147522, -86.671410, -124.630890 }, {-105.313477, -93.286789, -124.243340 }, {-86.421341, -97.256042, -128.942276 }, {-85.210320, -90.640633, -129.475143 }, {-78.864464, -82.702164, -119.980713 }, {-106.354897, -103.209908, -115.112106 }, {-89.618439, -109.825287, -118.139893 }, {-116.067299, -107.179153, -104.333832 }, {-108.728477, -113.133018, -109.008492 }, {-95.213348, -117.763786, -112.787018 }, {-105.918854, -127.025337, -105.908302 }, {-84.216957, -140.256180, -89.438423 }, {-100.977722, -137.610031, -97.963913 }, {-103.908508, -134.302277, -104.624603 }, {-72.881477, -140.917709, -66.961670 }, {-69.006271, -141.579254, -79.508034 }, {-87.656410, -140.917679, -103.825470 }, {-90.587181, -132.317642, -110.486137 }, {-88.915947, -138.271515, -108.330544 }, {-79.881699, -115.779160, -117.364899 }, {-66.560341, -103.209908, -123.226402 }, {-73.850838, -95.932961, -131.582474 }, {-64.283600, -79.394463, -121.337212 }, {-75.667389, -89.317551, -130.783203 }, {-64.719620, -85.348312, -130.541092 }, {-54.522690, -93.948334, -127.077553 }, {-70.410927, -150.179260, -62.989521 }, {-67.068581, -153.486954, -76.746880 }, {-70.144493, -162.748505, -62.383999 }, {-69.006248, -170.686996, -79.508034 } }; Triangle SkullTriangles[SKULL_TRIANGLES] = { {1, 637,0 }, {2, 1, 0 }, {3, 2, 0 }, {4, 3, 0 }, {5, 4, 0 }, {6, 5, 0 }, {7, 6, 0 }, {8, 7, 0 }, {9, 8, 0 }, {10, 9, 0 }, {11, 10, 0 }, {12, 11, 0 }, {13, 11, 12 }, {12, 14, 13 }, {16, 15, 13 }, {17, 15, 16 }, {19, 17, 18 }, {18, 20, 19 }, {21, 19, 20 }, {20, 22, 21 }, {23, 21, 22 }, {22, 24, 23 }, {23, 25, 21 }, {16, 13, 14 }, {18, 17, 16 }, {26, 25, 23 }, {23, 27, 26 }, {28, 27, 23 }, {23, 24, 28 }, {29, 26, 27 }, {27, 30, 29 }, {31, 30, 27 }, {27, 28, 31 }, {29, 32, 26 }, {33, 32, 29 }, {29, 34, 33 }, {35, 34, 29 }, {29, 36, 35 }, {30, 36, 29 }, {38, 37, 31 }, {39, 37, 38 }, {38, 40, 39 }, {40, 41, 39 }, {42, 30, 31 }, {31, 37, 42 }, {36, 30, 43 }, {44, 36, 43 }, {45, 44, 43 }, {37, 45, 43 }, {42, 37, 43 }, {30, 42, 43 }, {47, 46, 40 }, {49, 48, 47 }, {47, 50, 49 }, {40, 46, 41 }, {50, 47, 51 }, {53, 52, 50 }, {50, 54, 53 }, {55, 52, 53 }, {53, 56, 55 }, {55, 57, 52 }, {58, 52, 57 }, {51, 47, 40 }, {54, 50, 51 }, {52, 58, 50 }, {58, 49, 50 }, {48, 46, 47 }, {58, 57, 59 }, {60, 37, 39 }, {39, 41, 60 }, {61, 60, 41 }, {41, 46, 61 }, {62, 61, 46 }, {46, 48, 62 }, {63, 62, 48 }, {48, 49, 63 }, {64, 45, 37 }, {37, 65, 64 }, {60, 65, 37 }, {66, 65, 60 }, {60, 67, 66 }, {61, 67, 60 }, {63, 49, 58 }, {68, 64, 65 }, {65, 66, 68 }, {68, 66, 69 }, {70, 68, 69 }, {71, 70, 69 }, {59, 72, 63 }, {73, 72, 59 }, {59, 63, 58 }, {74, 35, 36 }, {36, 44, 74 }, {75, 34, 35 }, {35, 74, 75 }, {75, 33, 34 }, {76, 33, 75 }, {77, 33, 76 }, {78, 33, 77 }, {32, 33, 78 }, {78, 79, 32 }, {80, 32, 79 }, {26, 32, 80 }, {62, 81, 67 }, {67, 61, 62 }, {82, 81, 62 }, {62, 63, 82 }, {84, 83, 72 }, {72, 73, 84 }, {83, 84, 85 }, {86, 83, 85 }, {87, 86, 85 }, {88, 87, 85 }, {89, 88, 85 }, {90, 89, 85 }, {91, 90, 85 }, {84, 91, 85 }, {82, 72, 83 }, {63, 72, 82 }, {86, 92, 82 }, {82, 83, 86 }, {82, 92, 81 }, {67, 81, 92 }, {92, 93, 67 }, {94, 93, 92 }, {66, 67, 93 }, {93, 69, 66 }, {71, 69, 93 }, {71, 93, 94 }, {94, 95, 71 }, {70, 71, 95 }, {86, 87, 92 }, {94, 92, 87 }, {87, 96, 94 }, {97, 96, 87 }, {88, 97, 87 }, {98, 97, 88 }, {88, 99, 98 }, {89, 99, 88 }, {100, 99, 89 }, {101, 99, 100 }, {100, 102, 101 }, {101, 98, 99 }, {103, 98, 101 }, {101, 104, 103 }, {107, 106, 105 }, {105, 108, 107 }, {109, 108, 105 }, {110, 108, 109 }, {109, 111, 110 }, {111, 112, 110 }, {100, 89, 90 }, {106, 102, 100 }, {102, 104, 101 }, {113, 110, 112 }, {112, 114, 113 }, {115, 113, 114 }, {114, 116, 115 }, {108, 110, 113 }, {113, 107, 108 }, {117, 107, 113 }, {113, 118, 117 }, {117, 119, 107 }, {102, 106, 119 }, {107, 119, 106 }, {115, 118, 113 }, {120, 102, 119 }, {119, 117, 120 }, {122, 121, 117 }, {124, 123, 122 }, {125, 123, 124 }, {127, 126, 125 }, {117, 118, 127 }, {127, 124, 117 }, {125, 124, 127 }, {124, 122, 117 }, {121, 120, 117 }, {128, 102, 120 }, {128, 120, 121 }, {129, 115, 116 }, {130, 115, 129 }, {131, 115, 130 }, {131, 118, 115 }, {131, 127, 118 }, {131, 126, 127 }, {128, 104, 102 }, {103, 104, 128 }, {133, 132, 103 }, {134, 132, 133 }, {128, 134, 133 }, {135, 134, 128 }, {135, 128, 121 }, {122, 135, 121 }, {128, 133, 103 }, {136, 134, 135 }, {137, 134, 136 }, {139, 135, 138 }, {140, 136, 139 }, {123, 138, 122 }, {138, 135, 122 }, {139, 136, 135 }, {141, 137, 140 }, {132, 137, 141 }, {143, 142, 132 }, {141, 144, 143 }, {145, 144, 141 }, {141, 143, 132 }, {134, 137, 132 }, {136, 140, 137 }, {98, 103, 142 }, {142, 146, 98 }, {147, 146, 142 }, {143, 148, 147 }, {144, 149, 148 }, {145, 149, 144 }, {150, 149, 145 }, {145, 151, 150 }, {132, 142, 103 }, {143, 147, 142 }, {144, 148, 143 }, {153, 140, 152 }, {151, 154, 153 }, {145, 154, 151 }, {154, 145, 141 }, {140, 154, 141 }, {153, 154, 140 }, {152, 140, 139 }, {155, 97, 98 }, {94, 96, 156 }, {156, 95, 94 }, {158, 157, 68 }, {68, 70, 158 }, {64, 68, 157 }, {157, 159, 64 }, {160, 64, 159 }, {45, 64, 160 }, {95, 158, 70 }, {161, 158, 95 }, {162, 44, 45 }, {45, 160, 162 }, {74, 44, 162 }, {162, 163, 74 }, {75, 74, 163 }, {163, 164, 75 }, {165, 75, 164 }, {76, 75, 165 }, {165, 166, 76 }, {168, 166, 167 }, {76, 166, 168 }, {168, 169, 76 }, {76, 169, 170 }, {170, 77, 76 }, {171, 77, 170 }, {173, 172, 171 }, {174, 172, 173 }, {173, 169, 174 }, {170, 173, 171 }, {169, 173, 170 }, {175, 78, 171 }, {79, 78, 175 }, {77, 171, 78 }, {26, 80, 176 }, {25, 26, 176 }, {177, 25, 176 }, {178, 177, 176 }, {79, 178, 176 }, {80, 79, 176 }, {178, 79, 175 }, {175, 179, 178 }, {180, 179, 175 }, {180, 175, 172 }, {175, 171, 172 }, {21, 25, 177 }, {181, 174, 169 }, {169, 168, 181 }, {182, 181, 167 }, {168, 167, 181 }, {185, 184, 183 }, {98, 146, 184 }, {98, 184, 185 }, {186, 148, 149 }, {187, 186, 149 }, {149, 150, 187 }, {188, 148, 186 }, {147, 148, 188 }, {188, 189, 147 }, {190, 189, 188 }, {188, 186, 190 }, {189, 191, 147 }, {191, 146, 147 }, {192, 146, 191 }, {191, 189, 192 }, {184, 146, 192 }, {192, 183, 184 }, {194, 193, 189 }, {189, 190, 194 }, {195, 190, 186 }, {186, 187, 195 }, {196, 194, 190 }, {190, 195, 196 }, {198, 197, 172 }, {199, 197, 198 }, {200, 197, 199 }, {174, 198, 172 }, {203, 202, 201 }, {197, 200, 204 }, {204, 205, 197 }, {197, 205, 172 }, {180, 172, 205 }, {205, 206, 180 }, {207, 206, 205 }, {205, 208, 207 }, {204, 208, 205 }, {209, 208, 204 }, {204, 210, 209 }, {211, 210, 204 }, {204, 202, 211 }, {180, 206, 179 }, {207, 179, 206 }, {178, 179, 212 }, {212, 213, 178 }, {213, 177, 178 }, {21, 177, 213 }, {213, 19, 21 }, {211, 202, 203 }, {208, 214, 207 }, {179, 207, 214 }, {215, 17, 19 }, {19, 216, 215 }, {218, 217, 215 }, {215, 216, 218 }, {179, 219, 212 }, {213, 212, 219 }, {219, 218, 213 }, {216, 213, 218 }, {213, 216, 19 }, {215, 220, 15 }, {15, 17, 215 }, {221, 13, 15 }, {15, 220, 221 }, {10, 13, 221 }, {11, 13, 10 }, {222, 9, 10 }, {10, 221, 222 }, {223, 222, 221 }, {221, 220, 223 }, {217, 223, 220 }, {220, 215, 217 }, {224, 8, 9 }, {9, 222, 224 }, {223, 225, 224 }, {224, 222, 223 }, {226, 225, 223 }, {223, 217, 226 }, {227, 226, 217 }, {217, 218, 227 }, {228, 227, 218 }, {218, 219, 228 }, {214, 228, 219 }, {219, 179, 214 }, {229, 7, 8 }, {7, 229, 230 }, {8, 224, 229 }, {7, 230, 6 }, {5, 6, 230 }, {230, 231, 5 }, {4, 5, 231 }, {231, 232, 4 }, {233, 229, 224 }, {224, 225, 233 }, {234, 233, 225 }, {225, 226, 234 }, {209, 235, 208 }, {210, 235, 209 }, {236, 235, 210 }, {210, 211, 236 }, {237, 236, 211 }, {211, 203, 237 }, {238, 237, 203 }, {203, 239, 238 }, {240, 235, 236 }, {240, 241, 235 }, {243, 242, 240 }, {236, 244, 243 }, {236, 238, 244 }, {237, 238, 236 }, {243, 240, 236 }, {245, 208, 235 }, {246, 208, 245 }, {214, 208, 246 }, {246, 247, 214 }, {248, 214, 247 }, {228, 214, 248 }, {227, 248, 249 }, {228, 248, 227 }, {249, 234, 226 }, {226, 227, 249 }, {242, 241, 240 }, {235, 241, 250 }, {250, 251, 235 }, {252, 235, 251 }, {251, 253, 252 }, {250, 254, 251 }, {254, 250, 255 }, {256, 254, 255 }, {257, 256, 255 }, {258, 257, 255 }, {259, 258, 255 }, {260, 259, 255 }, {250, 260, 255 }, {241, 242, 259 }, {241, 259, 260 }, {260, 250, 241 }, {261, 245, 235 }, {235, 252, 261 }, {246, 245, 261 }, {261, 262, 246 }, {263, 246, 262 }, {247, 246, 263 }, {263, 264, 247 }, {248, 247, 264 }, {264, 265, 248 }, {249, 248, 265 }, {265, 266, 249 }, {249, 266, 267 }, {267, 234, 249 }, {268, 230, 229 }, {233, 268, 229 }, {267, 268, 233 }, {233, 234, 267 }, {269, 231, 230 }, {230, 268, 269 }, {270, 232, 231 }, {231, 269, 270 }, {3, 4, 232 }, {232, 271, 3 }, {270, 272, 271 }, {271, 232, 270 }, {273, 269, 268 }, {268, 267, 273 }, {266, 274, 273 }, {273, 267, 266 }, {275, 274, 266 }, {266, 265, 275 }, {276, 275, 265 }, {265, 264, 276 }, {263, 277, 276 }, {276, 264, 263 }, {261, 278, 277 }, {277, 262, 261 }, {263, 262, 277 }, {252, 278, 261 }, {279, 278, 252 }, {253, 280, 279 }, {279, 252, 253 }, {254, 281, 251 }, {282, 281, 254 }, {283, 281, 282 }, {280, 281, 283 }, {253, 281, 280 }, {251, 281, 253 }, {284, 282, 254 }, {254, 256, 284 }, {285, 284, 256 }, {256, 286, 285 }, {287, 286, 256 }, {289, 288, 287 }, {287, 258, 289 }, {287, 256, 257 }, {287, 257, 258 }, {288, 286, 287 }, {284, 290, 282 }, {291, 290, 284 }, {284, 285, 292 }, {286, 292, 285 }, {288, 293, 286 }, {292, 291, 284 }, {293, 292, 286 }, {294, 283, 282 }, {282, 290, 294 }, {296, 295, 290 }, {290, 291, 296 }, {297, 296, 291 }, {291, 292, 297 }, {298, 297, 292 }, {292, 293, 298 }, {301, 300, 299 }, {299, 302, 301 }, {302, 299, 303 }, {303, 304, 302 }, {304, 303, 305 }, {305, 306, 304 }, {306, 305, 307 }, {307, 308, 306 }, {309, 299, 300 }, {310, 303, 299 }, {309, 300, 311 }, {312, 299, 309 }, {299, 312, 310 }, {310, 305, 303 }, {307, 305, 310 }, {313, 309, 311 }, {315, 314, 313 }, {314, 316, 313 }, {317, 315, 313 }, {313, 311, 317 }, {316, 309, 313 }, {312, 309, 316 }, {316, 310, 312 }, {310, 316, 318 }, {318, 307, 310 }, {321, 320, 319 }, {322, 320, 321 }, {308, 320, 322 }, {307, 320, 308 }, {318, 320, 307 }, {319, 320, 318 }, {321, 324, 323 }, {323, 322, 321 }, {324, 325, 323 }, {326, 325, 324 }, {329, 328, 327 }, {326, 328, 329 }, {329, 325, 326 }, {327, 331, 330 }, {330, 329, 327 }, {334, 333, 332 }, {330, 331, 335 }, {335, 336, 330 }, {336, 335, 337 }, {337, 338, 336 }, {337, 340, 339 }, {339, 338, 337 }, {339, 340, 341 }, {341, 342, 339 }, {345, 344, 343 }, {343, 346, 345 }, {347, 343, 344 }, {344, 348, 347 }, {345, 342, 349 }, {349, 344, 345 }, {342, 341, 350 }, {350, 349, 342 }, {340, 352, 351 }, {351, 341, 340 }, {353, 341, 351 }, {353, 350, 341 }, {354, 352, 340 }, {340, 337, 354 }, {354, 337, 335 }, {335, 355, 354 }, {355, 335, 331 }, {331, 356, 355 }, {356, 331, 327 }, {327, 357, 356 }, {328, 357, 327 }, {357, 328, 326 }, {326, 358, 357 }, {326, 324, 359 }, {359, 358, 326 }, {362, 361, 360 }, {360, 363, 362 }, {363, 364, 362 }, {365, 360, 361 }, {365, 363, 360 }, {365, 315, 363 }, {365, 314, 315 }, {365, 316, 314 }, {365, 318, 316 }, {365, 361, 318 }, {319, 318, 361 }, {324, 321, 319 }, {319, 359, 324 }, {359, 319, 361 }, {361, 362, 359 }, {366, 362, 364 }, {354, 368, 367 }, {367, 352, 354 }, {368, 355, 369 }, {354, 355, 368 }, {355, 370, 369 }, {356, 370, 355 }, {370, 356, 357 }, {357, 371, 370 }, {358, 371, 357 }, {359, 371, 358 }, {373, 366, 372 }, {373, 375, 374 }, {376, 375, 373 }, {372, 376, 373 }, {366, 364, 372 }, {359, 362, 366 }, {373, 359, 366 }, {375, 378, 377 }, {377, 374, 375 }, {374, 377, 379 }, {379, 373, 374 }, {373, 379, 380 }, {380, 359, 373 }, {381, 359, 380 }, {371, 359, 381 }, {384, 383, 382 }, {382, 385, 384 }, {387, 378, 386 }, {334, 378, 387 }, {387, 333, 334 }, {384, 387, 386 }, {333, 387, 384 }, {384, 385, 333 }, {332, 333, 385 }, {385, 388, 332 }, {352, 367, 389 }, {389, 351, 352 }, {351, 389, 390 }, {390, 353, 351 }, {348, 344, 349 }, {349, 391, 348 }, {391, 349, 350 }, {350, 392, 391 }, {392, 350, 393 }, {353, 390, 394 }, {350, 353, 393 }, {394, 393, 353 }, {370, 396, 395 }, {395, 369, 370 }, {369, 395, 397 }, {397, 368, 369 }, {368, 397, 398 }, {398, 367, 368 }, {367, 398, 399 }, {399, 389, 367 }, {399, 400, 390 }, {390, 389, 399 }, {390, 400, 401 }, {401, 394, 390 }, {398, 403, 402 }, {402, 399, 398 }, {399, 402, 404 }, {404, 400, 399 }, {400, 404, 405 }, {405, 401, 400 }, {405, 407, 406 }, {404, 407, 405 }, {404, 402, 408 }, {408, 407, 404 }, {403, 409, 408 }, {408, 402, 403 }, {412, 411, 410 }, {397, 410, 411 }, {410, 397, 395 }, {395, 413, 410 }, {413, 395, 396 }, {397, 411, 403 }, {403, 398, 397 }, {403, 411, 412 }, {412, 409, 403 }, {370, 414, 396 }, {414, 370, 371 }, {377, 415, 379 }, {418, 417, 416 }, {420, 334, 419 }, {421, 420, 419 }, {422, 412, 410 }, {410, 423, 422 }, {424, 423, 410 }, {424, 410, 413 }, {413, 396, 424 }, {425, 396, 414 }, {396, 425, 426 }, {379, 415, 427 }, {427, 380, 379 }, {381, 380, 427 }, {427, 371, 381 }, {428, 371, 427 }, {414, 371, 428 }, {428, 425, 414 }, {426, 425, 428 }, {428, 429, 426 }, {429, 428, 430 }, {430, 428, 427 }, {427, 431, 430 }, {431, 427, 432 }, {415, 432, 427 }, {433, 432, 415 }, {433, 415, 377 }, {377, 417, 433 }, {378, 417, 377 }, {416, 417, 378 }, {378, 420, 416 }, {334, 420, 378 }, {420, 421, 434 }, {434, 416, 420 }, {418, 416, 434 }, {435, 434, 421 }, {435, 437, 436 }, {418, 434, 438 }, {438, 417, 418 }, {417, 432, 433 }, {438, 432, 417 }, {434, 436, 438 }, {435, 436, 434 }, {429, 440, 439 }, {431, 432, 441 }, {441, 430, 431 }, {440, 430, 441 }, {429, 430, 440 }, {443, 441, 442 }, {438, 436, 442 }, {442, 432, 438 }, {441, 432, 442 }, {443, 440, 441 }, {439, 440, 443 }, {419, 334, 332 }, {332, 444, 419 }, {388, 444, 332 }, {445, 444, 388 }, {446, 444, 445 }, {419, 444, 446 }, {446, 421, 419 }, {421, 446, 447 }, {447, 435, 421 }, {435, 447, 448 }, {448, 437, 435 }, {451, 450, 449 }, {449, 452, 451 }, {453, 452, 449 }, {449, 454, 453 }, {454, 455, 383 }, {455, 454, 449 }, {455, 449, 456 }, {449, 450, 456 }, {382, 457, 385 }, {382, 458, 457 }, {459, 457, 458 }, {460, 457, 459 }, {457, 388, 385 }, {460, 388, 457 }, {451, 462, 461 }, {461, 450, 451 }, {462, 464, 463 }, {463, 461, 462 }, {455, 382, 383 }, {382, 455, 456 }, {382, 465, 458 }, {456, 465, 382 }, {450, 461, 465 }, {465, 456, 450 }, {466, 448, 447 }, {447, 467, 466 }, {467, 447, 446 }, {446, 468, 467 }, {445, 468, 446 }, {388, 469, 445 }, {460, 469, 388 }, {460, 459, 470 }, {471, 467, 468 }, {468, 472, 471 }, {468, 445, 469 }, {469, 472, 468 }, {470, 472, 469 }, {470, 469, 460 }, {474, 470, 473 }, {472, 470, 474 }, {474, 471, 472 }, {459, 458, 465 }, {465, 475, 459 }, {470, 459, 475 }, {475, 473, 470 }, {476, 473, 475 }, {475, 477, 476 }, {475, 465, 478 }, {478, 477, 475 }, {479, 477, 478 }, {479, 478, 465 }, {461, 463, 480 }, {480, 465, 461 }, {479, 465, 480 }, {480, 481, 479 }, {463, 481, 480 }, {464, 483, 482 }, {482, 463, 464 }, {482, 481, 463 }, {443, 484, 439 }, {443, 442, 484 }, {442, 436, 485 }, {485, 484, 442 }, {448, 466, 486 }, {487, 437, 448 }, {487, 436, 437 }, {485, 436, 487 }, {486, 487, 448 }, {488, 487, 486 }, {484, 485, 489 }, {487, 489, 485 }, {489, 487, 488 }, {471, 466, 467 }, {490, 466, 471 }, {490, 486, 466 }, {491, 486, 490 }, {493, 476, 492 }, {476, 477, 492 }, {495, 491, 494 }, {496, 495, 494 }, {496, 494, 497 }, {490, 494, 491 }, {473, 476, 493 }, {493, 474, 473 }, {474, 493, 497 }, {497, 471, 474 }, {490, 471, 497 }, {497, 494, 490 }, {486, 491, 498 }, {498, 488, 486 }, {484, 500, 499 }, {502, 498, 501 }, {502, 488, 498 }, {489, 488, 502 }, {503, 484, 489 }, {500, 484, 503 }, {484, 499, 504 }, {504, 439, 484 }, {423, 505, 422 }, {429, 507, 506 }, {429, 506, 426 }, {506, 396, 426 }, {424, 396, 506 }, {506, 508, 424 }, {510, 508, 509 }, {510, 424, 508 }, {510, 423, 424 }, {510, 505, 423 }, {510, 511, 505 }, {510, 509, 511 }, {513, 507, 512 }, {506, 513, 508 }, {507, 513, 506 }, {515, 514, 504 }, {507, 514, 515 }, {439, 504, 514 }, {514, 429, 439 }, {507, 429, 514 }, {515, 512, 507 }, {516, 512, 515 }, {515, 504, 516 }, {516, 504, 499 }, {499, 517, 516 }, {500, 517, 499 }, {516, 517, 518 }, {518, 519, 516 }, {520, 519, 518 }, {519, 520, 521 }, {521, 522, 519 }, {522, 521, 523 }, {523, 524, 522 }, {523, 526, 525 }, {525, 524, 523 }, {498, 491, 495 }, {498, 495, 496 }, {496, 501, 498 }, {496, 497, 527 }, {529, 496, 528 }, {496, 529, 530 }, {530, 501, 496 }, {529, 531, 530 }, {532, 531, 529 }, {526, 533, 525 }, {534, 533, 526 }, {533, 534, 535 }, {535, 536, 533 }, {531, 532, 536 }, {536, 535, 531 }, {527, 528, 496 }, {537, 529, 528 }, {528, 538, 537 }, {527, 538, 528 }, {539, 538, 527 }, {527, 540, 539 }, {497, 540, 527 }, {493, 540, 497 }, {540, 493, 492 }, {492, 539, 540 }, {543, 542, 541 }, {542, 545, 544 }, {546, 545, 542 }, {546, 547, 545 }, {548, 545, 547 }, {544, 545, 548 }, {541, 542, 544 }, {550, 481, 549 }, {551, 479, 550 }, {553, 551, 552 }, {483, 548, 547 }, {547, 482, 483 }, {549, 482, 547 }, {481, 482, 549 }, {479, 481, 550 }, {551, 477, 479 }, {492, 477, 551 }, {551, 553, 492 }, {555, 542, 554 }, {552, 555, 556 }, {552, 550, 546 }, {546, 549, 547 }, {550, 549, 546 }, {552, 551, 550 }, {546, 555, 552 }, {542, 555, 546 }, {557, 554, 543 }, {559, 557, 558 }, {559, 558, 560 }, {543, 554, 542 }, {558, 557, 543 }, {554, 556, 555 }, {557, 556, 554 }, {553, 562, 561 }, {563, 557, 559 }, {563, 561, 557 }, {561, 556, 557 }, {562, 556, 561 }, {562, 552, 556 }, {553, 552, 562 }, {561, 564, 553 }, {565, 564, 561 }, {568, 567, 566 }, {569, 568, 566 }, {570, 569, 566 }, {571, 570, 566 }, {129, 570, 571 }, {116, 570, 129 }, {563, 572, 561 }, {572, 565, 561 }, {573, 572, 563 }, {573, 559, 574 }, {568, 574, 575 }, {573, 574, 568 }, {568, 569, 573 }, {575, 567, 568 }, {574, 560, 575 }, {559, 560, 574 }, {573, 563, 559 }, {572, 573, 576 }, {576, 565, 572 }, {577, 569, 570 }, {579, 576, 578 }, {576, 579, 565 }, {578, 576, 573 }, {573, 569, 577 }, {577, 578, 573 }, {580, 578, 577 }, {577, 581, 580 }, {570, 116, 114 }, {114, 577, 570 }, {577, 114, 112 }, {112, 581, 577 }, {582, 564, 565 }, {583, 565, 579 }, {585, 584, 583 }, {581, 112, 111 }, {581, 111, 586 }, {586, 580, 581 }, {587, 580, 586 }, {578, 580, 587 }, {587, 579, 578 }, {553, 564, 582 }, {582, 492, 553 }, {588, 492, 582 }, {582, 565, 583 }, {583, 588, 582 }, {584, 588, 583 }, {589, 588, 584 }, {492, 588, 589 }, {589, 539, 492 }, {590, 539, 589 }, {590, 538, 539 }, {537, 538, 590 }, {590, 591, 537 }, {591, 590, 592 }, {529, 593, 532 }, {593, 529, 537 }, {537, 594, 593 }, {594, 595, 593 }, {596, 595, 594 }, {594, 597, 596 }, {591, 594, 537 }, {597, 594, 591 }, {591, 598, 597 }, {598, 591, 599 }, {592, 600, 599 }, {599, 591, 592 }, {599, 602, 601 }, {600, 602, 599 }, {605, 604, 603 }, {605, 585, 604 }, {605, 584, 585 }, {605, 589, 584 }, {605, 590, 589 }, {605, 592, 590 }, {605, 600, 592 }, {605, 603, 600 }, {603, 606, 602 }, {602, 600, 603 }, {599, 601, 607 }, {607, 598, 599 }, {607, 608, 597 }, {597, 598, 607 }, {509, 609, 511 }, {508, 609, 509 }, {609, 508, 513 }, {513, 610, 609 }, {512, 610, 513 }, {516, 610, 512 }, {519, 610, 516 }, {611, 610, 519 }, {519, 522, 612 }, {612, 611, 519 }, {522, 524, 613 }, {613, 612, 522 }, {615, 601, 614 }, {614, 602, 606 }, {601, 602, 614 }, {595, 532, 593 }, {595, 536, 532 }, {595, 596, 536 }, {536, 596, 616 }, {616, 533, 536 }, {615, 617, 601 }, {618, 597, 608 }, {596, 597, 618 }, {618, 616, 596 }, {619, 616, 618 }, {533, 616, 619 }, {619, 525, 533 }, {601, 617, 620 }, {620, 607, 601 }, {607, 620, 621 }, {621, 608, 607 }, {608, 621, 622 }, {622, 618, 608 }, {618, 622, 623 }, {623, 619, 618 }, {614, 624, 615 }, {625, 621, 620 }, {626, 617, 615 }, {626, 615, 627 }, {51, 626, 54 }, {40, 625, 51 }, {624, 627, 615 }, {627, 624, 628 }, {628, 56, 53 }, {53, 627, 628 }, {53, 54, 626 }, {626, 627, 53 }, {51, 625, 626 }, {622, 621, 40 }, {617, 626, 625 }, {625, 620, 617 }, {40, 621, 625 }, {631, 630, 629 }, {631, 619, 630 }, {631, 525, 619 }, {631, 524, 525 }, {631, 613, 524 }, {631, 629, 613 }, {630, 619, 31 }, {31, 629, 630 }, {623, 622, 40 }, {623, 40, 38 }, {38, 619, 623 }, {31, 619, 38 }, {632, 613, 629 }, {612, 613, 632 }, {632, 611, 612 }, {610, 611, 632 }, {632, 609, 610 }, {511, 609, 632 }, {31, 28, 633 }, {633, 629, 31 }, {632, 629, 633 }, {633, 511, 632 }, {28, 24, 634 }, {634, 633, 28 }, {511, 633, 634 }, {634, 505, 511 }, {16, 409, 18 }, {14, 407, 16 }, {422, 505, 634 }, {634, 24, 22 }, {22, 422, 634 }, {422, 22, 20 }, {20, 412, 422 }, {412, 20, 18 }, {18, 409, 412 }, {16, 408, 409 }, {407, 408, 16 }, {407, 14, 12 }, {12, 406, 407 }, {0, 406, 12 }, {0, 405, 406 }, {0, 401, 405 }, {0, 394, 401 }, {0, 393, 394 }, {0, 392, 393 }, {0, 391, 392 }, {0, 348, 391 }, {0, 347, 348 }, {0, 635, 347 }, {0, 636, 635 }, {0, 637, 636 }, {639, 638, 181 }, {639, 181, 182 }, {640, 198, 174 }, {174, 181, 640 }, {198, 640, 199 }, {199, 640, 641 }, {643, 642, 641 }, {638, 643, 641 }, {181, 638, 641 }, {640, 181, 641 }, {641, 642, 644 }, {641, 644, 199 }, {199, 644, 200 }, {200, 644, 204 }, {644, 202, 204 }, {202, 644, 201 }, {644, 642, 645 }, {644, 645, 201 }, {201, 645, 203 }, {645, 239, 203 }, {645, 646, 239 }, {648, 647, 646 }, {648, 646, 649 }, {646, 645, 649 }, {649, 645, 642 }, {648, 649, 642 }, {648, 642, 643 }, {650, 648, 643 }, {648, 650, 651 }, {646, 647, 239 }, {653, 652, 647 }, {651, 653, 647 }, {651, 647, 648 }, {647, 652, 239 }, {239, 652, 654 }, {654, 655, 239 }, {654, 656, 655 }, {657, 656, 654 }, {657, 654, 652 }, {658, 656, 657 }, {659, 658, 657 }, {659, 652, 653 }, {660, 659, 653 }, {659, 657, 652 }, {661, 658, 659 }, {660, 661, 659 }, {662, 661, 660 }, {664, 663, 639 }, {665, 664, 639 }, {639, 663, 638 }, {663, 643, 638 }, {663, 666, 643 }, {667, 666, 663 }, {666, 650, 643 }, {667, 650, 666 }, {668, 650, 667 }, {668, 651, 650 }, {669, 663, 664 }, {669, 667, 663 }, {669, 670, 667 }, {671, 670, 669 }, {672, 671, 669 }, {664, 665, 673 }, {673, 672, 664 }, {672, 669, 664 }, {670, 668, 667 }, {668, 670, 674 }, {675, 674, 670 }, {671, 675, 670 }, {674, 676, 668 }, {676, 651, 668 }, {676, 653, 651 }, {653, 676, 660 }, {676, 662, 660 }, {677, 662, 676 }, {677, 676, 674 }, {674, 675, 677 }, {675, 678, 677 }, {678, 679, 677 }, {679, 662, 677 }, {680, 656, 658 }, {680, 658, 681 }, {658, 661, 681 }, {681, 661, 682 }, {682, 661, 679 }, {679, 661, 662 }, {680, 683, 656 }, {684, 683, 680 }, {193, 684, 680 }, {189, 193, 680 }, {685, 189, 680 }, {685, 680, 681 }, {687, 682, 686 }, {687, 681, 682 }, {681, 687, 685 }, {189, 685, 687 }, {686, 679, 678 }, {682, 679, 686 }, {183, 686, 678 }, {183, 678, 688 }, {690, 689, 671 }, {671, 689, 675 }, {689, 688, 675 }, {688, 678, 675 }, {692, 673, 691 }, {693, 692, 691 }, {690, 692, 693 }, {693, 694, 690 }, {694, 689, 690 }, {692, 672, 673 }, {692, 690, 672 }, {672, 690, 671 }, {693, 691, 161 }, {95, 693, 161 }, {156, 694, 693 }, {156, 693, 95 }, {96, 694, 156 }, {97, 155, 694 }, {97, 694, 96 }, {155, 689, 694 }, {155, 185, 689 }, {98, 185, 155 }, {185, 688, 689 }, {185, 183, 688 }, {684, 695, 683 }, {696, 695, 684 }, {696, 697, 695 }, {698, 697, 696 }, {696, 684, 193 }, {193, 194, 696 }, {194, 196, 696 }, {696, 196, 698 }, {192, 686, 183 }, {192, 687, 686 }, {192, 189, 687 } }; #undef CLAMP #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) bool BackfaceCull = false; bool DoubleBuffer = true; bool Lighting = true; int PrimitiveType = FLAT_SHADED; float ScaleFactor = 0.000912; int Width, Height; Vertex Light1 = {0.0, 0.0, 1.0}; Vertex Light2 = {0.2, -0.2, 0.4}; static Tri3D Triangles[SKULL_TRIANGLES]; static Vertex TransformedVerticies[SKULL_VERTICIES]; static void DrawTriangle(jgui::Graphics *g, float light1, float light2, Tri3D* tri) { uint8_t r1, g1, b1; int X, Y; X = Width >> 1; Y = Height >> 1; r1 = (uint8_t)(light1 * 255.0); g1 = (uint8_t)((light1 * light1) * 255.0); b1 = (uint8_t)(light1 * 64.0 + light2 * 64.0); g->SetColor(r1, g1, b1, 0xff); switch (PrimitiveType) { case FLAT_SHADED: g->FillTriangle((int)(tri->a->x + X), (int)(tri->a->y + Y), (int)(tri->b->x + X), (int)(tri->b->y + Y), (int)(tri->c->x + X), (int)(tri->c->y + Y)); break; case WIRE_FRAME: g->DrawLine((int)(tri->a->x + X), (int)(tri->a->y + Y), (int)(tri->b->x + X), (int)(tri->b->y + Y)); g->DrawLine((int)(tri->b->x + X), (int)(tri->b->y + Y), (int)(tri->c->x + X), (int)(tri->c->y + Y)); g->DrawLine((int)(tri->c->x + X), (int)(tri->c->y + Y), (int)(tri->a->x + X), (int)(tri->a->y + Y)); break; default: break; } } class GraphicsTeste : public jgui::Frame{ private: jthread::Mutex teste_mutex; int dxL, dyL; public: GraphicsTeste(): jgui::Frame("", 0, 0, 1920, 1080) { Width = _size.width; Height = _size.height; ScaleFactor *= Height; InitMatrix(); SetupMatrix(ScaleFactor); dxL = 11; dyL = 7; SetBackgroundColor(0x00, 0x00, 0x00, 0x00); } virtual ~GraphicsTeste() { jthread::AutoLock lock(&teste_mutex); Hide(); } virtual void Paint(jgui::Graphics *g) { jgui::Frame::Paint(g); int count, NumUsed = 0; Tri3D *current = Triangles; Tri3D *first = Triangles; Tri3D *pntr, *prev; Triangle *points = SkullTriangles; Vertex *transPoints = TransformedVerticies; Vertex *untransPoints = SkullVerticies; Vertex A, B; float length; float light1, light2; count = SKULL_VERTICIES; while(count--) MultiplyVector(untransPoints++, transPoints++); first->next = NULL; count = SKULL_TRIANGLES; while(count--) { current->a = TransformedVerticies + points->a; current->b = TransformedVerticies + points->b; current->c = TransformedVerticies + points->c; A.x = current->b->x - current->a->x; A.y = current->b->y - current->a->y; A.z = current->b->z - current->a->z; B.x = current->c->x - current->b->x; B.y = current->c->y - current->b->y; B.z = current->c->z - current->b->z; current->normal.z = (A.x * B.y) - (A.y * B.x); if(BackfaceCull && (current->normal.z >= 0.0)) { points++; continue; } current->normal.y = (A.z * B.x) - (A.x * B.z); current->normal.x = (A.y * B.z) - (A.z * B.y); current->depth = current->a->z + current->b->z + current->c->z; /* Not the smartest sorting algorithm */ if(NumUsed) { prev = NULL; pntr = first; while(pntr) { if(current->depth > pntr->depth) { if(pntr->next) { prev = pntr; pntr = pntr->next; } else { pntr->next = current; current->next = NULL; break; } } else { if(prev) { prev->next = current; current->next = pntr; } else { current->next = pntr; first = current; } break; } } } NumUsed++; current++; points++; } while(first) { if(Lighting) { length = ((first->normal.x * first->normal.x) + (first->normal.y * first->normal.y) + (first->normal.z * first->normal.z)); length = (float)sqrt((double)length); light1 = -((first->normal.x * Light1.x) + (first->normal.y * Light1.y) + (first->normal.z * Light1.z)) / length; light1 = CLAMP (light1, 0.0, 1.0); light2 = abs((int)((first->normal.x * Light2.x) + (first->normal.y * Light2.y) + (first->normal.z * Light2.z))) / length; light2 = CLAMP (light2, 0.0, 1.0); } else { light1 = 1.0; light2 = 0.0; } DrawTriangle(g, light1, light2, first); first = first->next; } } virtual bool ProcessEvent(jgui::KeyEvent *event) { jthread::AutoLock lock(&teste_mutex); if (event->GetType() != jgui::JKT_PRESSED) { return false; } int step = 20; if (event->GetSymbol() == jgui::JKS_CURSOR_UP) { Rotate (step * 2, 'x'); } else if (event->GetSymbol() == jgui::JKS_CURSOR_DOWN) { Rotate (-step * 2, 'x'); } else if (event->GetSymbol() == jgui::JKS_CURSOR_LEFT) { Rotate (step * 2, 'y'); } else if (event->GetSymbol() == jgui::JKS_CURSOR_RIGHT) { Rotate (-step * 2, 'y'); } else if (event->GetSymbol() == jgui::JKS_L || event->GetSymbol() == jgui::JKS_l) { if (rand()%50 == 0) dxL += rand()%5 - 2; if (rand()%50 == 0) dyL += rand()%5 - 2; if(dxL | dyL) RotateLight(&Light1, dxL, dyL); } else if (event->GetSymbol() == jgui::JKS_W || event->GetSymbol() == jgui::JKS_w) { if (PrimitiveType == FLAT_SHADED) { PrimitiveType = WIRE_FRAME; } else { PrimitiveType = FLAT_SHADED; } } else if (event->GetSymbol() == jgui::JKS_SPACE) { for (int i=0; i<1000; i++) { Rotate (step * 2, 'x'); Rotate (step * 2, 'y'); Repaint(); } } Repaint(); return true; } }; int main( int argc, char *argv[] ) { GraphicsTeste test; test.Show(); return 0; }