//-------------------------------------------------------------- // create the intro track void Intro::initTrack() { const double TRACK_RADIUS = 50.0; const int TRACK_POINTS = 12; const double CNTL_LEN = 2*TRACK_RADIUS/TRACK_POINTS; mgPoint3 points[TRACK_POINTS+2]; // create simple circular track for (int i = 0; i <= TRACK_POINTS+1; i++) { double lenAngle = (2*PI*i)/TRACK_POINTS; mgPoint3* pt = &points[i]; pt->x = m_origin.x + TRACK_RADIUS * cos(lenAngle); pt->x -= TRACK_RADIUS; // 0,0,0 is start position pt->y = m_origin.y + 2*sin(5*(2*PI*i)/TRACK_POINTS); pt->z = m_origin.z + TRACK_RADIUS * sin(lenAngle); } // build first point of spline mgPoint3 pt, lastPt, nextPt; pt = points[0]; lastPt = points[TRACK_POINTS-1]; nextPt = points[1]; mgPoint3 cntlPt(pt); cntlPt.subtract(lastPt); cntlPt.add(nextPt); cntlPt.subtract(pt); cntlPt.scale(0.125); cntlPt.add(pt); mgBezier* wallTrack = new mgBezier(); mgBezier* tubeTrack = new mgBezier(); wallTrack->addVertex(pt, cntlPt); tubeTrack->addVertex(pt, cntlPt); // build remaining points of spline for (int i = 1; i <= TRACK_POINTS; i++) { mgPoint3 pt = points[i]; mgPoint3 lastPt = points[i-1]; mgPoint3 nextPt = points[i+1]; mgPoint3 cntlPt(pt); cntlPt.subtract(lastPt); cntlPt.add(nextPt); cntlPt.subtract(pt); cntlPt.scale(-0.125); cntlPt.add(pt); wallTrack->addVertex(pt, cntlPt); tubeTrack->addVertex(pt, cntlPt); } m_tube->setTrack(tubeTrack); m_wall->setTrack(wallTrack); }
//-------------------------------------------------------------------- // initialize the track void DontHitMe::initTrack() { m_tube = new Tube(TUBE_RADIUS, TUBE_STEPS); const double TRACK_RADIUS = 350.0; const int TRACK_POINTS = 12; const double CNTL_LEN = 2*TRACK_RADIUS/TRACK_POINTS; mgPoint3 points[TRACK_POINTS+2]; // create simple circular track for (int i = 0; i <= TRACK_POINTS+1; i++) { double lenAngle = (2*PI*i)/TRACK_POINTS; mgPoint3* pt = &points[i]; pt->x = TRACK_RADIUS * cos(lenAngle); pt->y = 60*sin(5*(2*PI*i)/TRACK_POINTS); pt->z = TRACK_RADIUS * sin(lenAngle); } // build first point of spline mgPoint3 pt, lastPt, nextPt; pt = points[0]; lastPt = points[TRACK_POINTS-1]; nextPt = points[1]; mgPoint3 cntlPt(pt); cntlPt.subtract(lastPt); cntlPt.add(nextPt); cntlPt.subtract(pt); cntlPt.scale(0.125); cntlPt.add(pt); mgBezier* track = new mgBezier(); track->addVertex(pt, cntlPt); // build remaining points of spline for (int i = 1; i <= TRACK_POINTS; i++) { mgPoint3 pt = points[i]; mgPoint3 lastPt = points[i-1]; mgPoint3 nextPt = points[i+1]; mgPoint3 cntlPt(pt); cntlPt.subtract(lastPt); cntlPt.add(nextPt); cntlPt.subtract(pt); cntlPt.scale(-0.125); cntlPt.add(pt); track->addVertex(pt, cntlPt); } m_tube->setTrack(track); }