[osg-users] Creating Custom Render Loop with the Leap Motion?

2013-04-22 Thread Grace Christenbery
Hi,

I am currently trying to implement camera control with the Leap Motion in an 
OpenSceneGraph world. However, the Leap has it's own frame function, like the 
OSG viewer. Naturally, when I run both frame loops, they are not asynchronous. 
They happen sequentially. I would like to set it up so that the graphics update 
in my Leap frame loop; if this isn't possible, I would like to set it up so 
that both loops are asynchronous and the Leap frames can send data to the 
viewer frames to update the camera. In my attempt to create a custom loop, 
mouse input is no longer recognized--the renderer / window freezes, but the 
Leap keeps obtaining new frames in the console. (Two windows appear when I run 
my program, the window with the OSG world and a console window that outputs 
Leap data). If you want to look at the code I actually use, it's below.

Here's an example of setting up the Leap for a frame loop.


Code:
// Have the sample listener receive events from the controller
controller.addListener(listener);

// Keep this process running until Enter is pressed
std::cout  Press Enter to quit...  std::endl;
std::cin.get();

// Remove the sample listener when done
controller.removeListener(listener);



Here's an example of my attempt to update the scene within the Leap frame:


Code:
void SampleListener::onFrame(const Leap::Controller controller) {

  // Get the most recent frame and report some basic information
  const Leap::Frame frame = controller.frame();
  std::cout  Frame id:   frame.id()
 , timestamp:   frame.timestamp()
 , hands:   frame.hands().count()
 , fingers:   frame.fingers().count()
 , tools:   frame.tools().count()
 , gestures:   frame.gestures().count()  std::endl;

   if(LeapFramesRunning) //LeapFramesRunning is true
   {
   viewer.frame();
   }

  if (!frame.hands().empty()) {
// Get the first hand
const Leap::Hand hand = frame.hands()[0];

// Check if the hand has any fingers
const Leap::FingerList fingers = hand.fingers();
if (!fingers.empty()) {
  // Calculate the hand's average finger tip position
  Leap::Vector avgPos;
  for (int i = 0; i  fingers.count(); ++i) {
avgPos += fingers[i].tipPosition();
  }
  avgPos /= (float)fingers.count();
  std::cout  Hand has   fingers.count()
  fingers, average finger tip position  avgPos  
std::endl;
}

// Get the hand's sphere radius and palm position
std::cout  Hand sphere radius:   hand.sphereRadius()
mm, palm position:   hand.palmPosition()  std::endl;

// Get the hand's normal vector and direction
const Leap::Vector normal = hand.palmNormal();
const Leap::Vector direction = hand.direction();

// Calculate the hand's pitch, roll, and yaw angles
std::cout  Hand pitch:   direction.pitch() * Leap::RAD_TO_DEG   
degrees, 
   roll:   normal.roll() * Leap::RAD_TO_DEG   degrees, 
   yaw:   direction.yaw() * Leap::RAD_TO_DEG   degrees  
std::endl;
  }

  // Get gestures
  const Leap::GestureList gestures = frame.gestures();
  for (int g = 0; g  gestures.count(); ++g) {
Leap::Gesture gesture = gestures[g];

switch (gesture.type()) {
  case Leap::Gesture::TYPE_CIRCLE:
  {
Leap::CircleGesture circle = gesture;
std::string clockwiseness;

if (circle.pointable().direction().angleTo(circle.normal()) = 
Leap::PI/4) {
  clockwiseness = clockwise;
} else {
  clockwiseness = counterclockwise;
}

// Calculate angle swept since last frame
float sweptAngle = 0;
if (circle.state() != Leap::Gesture::STATE_START) {
  Leap::CircleGesture previousUpdate = 
Leap::CircleGesture(controller.frame(1).gesture(circle.id()));
  sweptAngle = (circle.progress() - previousUpdate.progress()) * 2 * 
Leap::PI;
}
std::cout  Circle id:   gesture.id()
   , state:   gesture.state()
   , progress:   circle.progress()
   , radius:   circle.radius()
   , angle   sweptAngle * Leap::RAD_TO_DEG
,   clockwiseness  std::endl;
break;
  }
  case Leap::Gesture::TYPE_SWIPE:
  {
Leap::SwipeGesture swipe = gesture;
std::cout  Swipe id:   gesture.id()
   , state:   gesture.state()
   , direction:   swipe.direction()
   , speed:   swipe.speed()  std::endl;
break;
  }
  case Leap::Gesture::TYPE_KEY_TAP:
  {
Leap::KeyTapGesture tap = gesture;
std::cout  Key Tap id:   gesture.id()
   , state:   gesture.state()
   , position:   tap.position()
   , direction:   tap.direction() std::endl;
break;
  }
  case Leap::Gesture::TYPE_SCREEN_TAP:
  {
Leap::ScreenTapGesture screentap = gesture;

[osg-users] Can't run osgpointsprite.cpp example - std::bad_alloc at memory location

2013-04-22 Thread Grace Christenbery
Hi,

When I try to debug the osgpointsprites.cpp example, it builds fine, but I 
can't run it, I get a bad allocation memory error in xstring.

What would be causing this or how can I get around it to run this code and view 
the result?

Thank you!

Cheers,
Grace

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=53448#53448





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org