@Override
  public void draw() {
    g.clear();
    g.color(255);
    _myTouchInteractionManager.draw(g);
    g.clearDepthBuffer();

    g.pushMatrix();
    _myArcball.draw(g);
    g.scale(0.5);
    g.color(255, 0, 0);
    g.pointSize(3);
    g.beginShape(CCDrawMode.POINTS);
    for (CCSkeletonTouchLocation myLocation : _myTouchInteractionManager.locations()) {
      g.vertex(myLocation.position());
    }
    g.endShape();
    for (CCSkeletonTouchLocation myLocation : _myTouchInteractionManager.locations()) {
      g.ellipse(myLocation.position(), myLocation.sourceProximity() * 100);
    }
    g.color(255);
    for (CCSkeleton mySkeleton : _mySkeletonManager.skeletons()) {
      mySkeleton.draw(g);
      CCPlane3f myBodyPlane = mySkeleton.bodyPlane();
      myBodyPlane.drawScale(100);
      myBodyPlane.draw(g);
    }
    for (CCTouchSource mySource : _myTouchInteractionManager.sources()) {
      g.ellipse(mySource.position(), mySource.locationProximity() * 100);
    }
    g.popMatrix();
  }
  @Override
  public void update(final float theDeltaTime) {
    _myPlane.normal().set(_cNormX, _cNormY, _cNormZ).normalize();
    _myPlane.constant(_cPlaneConstant);

    _myIntersections.clear();
    for (CCRay3f myRay : _myRays) {
      CCVector3f myIntersection = _myPlane.intersection(myRay);
      if (myIntersection != null) _myIntersections.add(myIntersection);
    }
  }
  @Override
  public void draw() {
    g.clear();
    _myArcball.draw(g);

    g.color(255, 100);
    _myPlane.draw(g);
    for (CCRay3f myRay : _myRays) {
      myRay.draw(g);
    }

    g.clearDepthBuffer();
    g.color(255, 0, 0);
    for (CCVector3f myIntersection : _myIntersections) {
      g.point(myIntersection);
    }
  }