import processing.opengl.*; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // Written by v3ga - http://www.v3ga.net // Updated to processing 118 by Martin Antolini //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- int W = 800; int H = 600; float DEGTORAD = PI/180.0; Torus torus; timer Timer; float a, aSpeed; boolean launched = false; boolean frameBlending = true; boolean drawTorus = false; char drawFlag_Line = 0x01; char drawFlag_Tangent = 0x02; int pixelNb = W*H; int[] buffer = new int[pixelNb]; int boidNb = 15; Boid[] boid = new Boid[boidNb]; // SetUp void setup() { size(W,H, OPENGL); background(255); // Create the path torus = new Torus(150.0, 3, 5); // Create the boids float startTh = 0.0; for (int i=0 ; i= 360.0) a -= 360.0; updatePixels(); } // ------------------------------------------- // Blend Table // Frame Blending // ------------------------------------------- char[] blendTable = new char[256*256]; void createBlendTable(float blendFactor) { int i,j; float blendFactor_1 = 1.0 - blendFactor; for (i=0 ; i<256 ; i++) for (j=0 ; j<256 ; j++) blendTable[i+j*256] = (char) (blendFactor * (float)i + blendFactor_1*(float)j); } void blendFrame(int[] now, int[] previous, int nb) { int pix,buf; char R,G,B; char R_,G_,B_; for (int p=0 ; p=360.0) m_th -= 360.0; m_th2+=m_speed2*dt; if (m_th2>=360.0) m_th2 -= 360.0; } void M_draw() { m_basis = m_torus.M_getTangentBasis(m_th); m_origin = m_torus.M_getPointAt(m_th); sm_newPos.x = m_basis[0] * m_pos.x + m_basis[3] * m_pos.y + m_basis[6] * m_pos.z + m_origin.x; sm_newPos.y = m_basis[1] * m_pos.x + m_basis[4] * m_pos.y + m_basis[7] * m_pos.z + m_origin.y; sm_newPos.z = m_basis[2] * m_pos.x + m_basis[5] * m_pos.y + m_basis[8] * m_pos.z + m_origin.z; pushMatrix(); translate(sm_newPos.x, sm_newPos.y, sm_newPos.z); noStroke(); fill(153,0,0); box(m_size); popMatrix(); stroke(153,152,168); m_tail.M_update(sm_newPos); m_tail.M_draw(); } }; // ------------------------------------------- // class Tail // ------------------------------------------- class __Tail__ { int m_pointsNb; vector3[] m_points; __Tail__(int pointsNb) { m_pointsNb = pointsNb; m_points = new vector3[m_pointsNb]; for (int i=0 ; i