コード例 #1
0
TEST_F(OsgSkeletonRepresentationRenderTests, WithNeutralPoseTest)
{
	auto graphics = std::make_shared<SurgSim::Graphics::OsgSkeletonRepresentation>("Skeleton");
	graphics->loadModel("OsgSkeletonRepresentationRenderTests/rigged_cylinder.osgt");
	graphics->setSkinningShaderFileName("Shaders/skinning.vert");
	graphics->setNeutralBonePose("Bone",
		makeRigidTransform(makeRotationQuaternion(M_PI_4, Vector3d(1.0, 1.0, 1.0)), Vector3d::Zero()));

	auto sceneElement = std::make_shared<SurgSim::Framework::BasicSceneElement>("Rigged Cylinder");
	sceneElement->addComponent(graphics);
	scene->addSceneElement(sceneElement);

	viewElement->setPose(SurgSim::Math::makeRigidTransform(
		Vector3d(-0.3, 0.3, -0.3),
		Vector3d(0.0, 0.0, 0.0),
		Vector3d(0.0, 0.0, 1.0)));

	runtime->start();
	boost::this_thread::sleep(boost::posix_time::milliseconds(2000));

	std::pair<RigidTransform3d, RigidTransform3d> rootTransform;
	rootTransform.first =
		makeRigidTransform(makeRotationQuaternion(0.0, Vector3d(1.0, 1.0, 1.0)), Vector3d::Zero());
	rootTransform.second =
		makeRigidTransform(makeRotationQuaternion(0.0, Vector3d(1.0, 1.0, 1.0)), Vector3d::Zero());

	std::pair<RigidTransform3d, RigidTransform3d> boneTransform;
	boneTransform.first =
		makeRigidTransform(makeRotationQuaternion(0.0, Vector3d(1.0, 0.0, 0.0)), Vector3d::Zero());
	boneTransform.second =
		makeRigidTransform(makeRotationQuaternion(0.0, Vector3d(1.0, 0.0, 0.0)), Vector3d(0.0, 4.0, 0.0));

	int numSteps = 1000;

	for (int i = 0; i < numSteps; ++i)
	{
		double t = static_cast<double>(i) / numSteps;

		RigidTransform3d pose = interpolate(rootTransform, t);
		sceneElement->setPose(pose);

		pose = interpolate(boneTransform, t / 3.0);
		graphics->setBonePose("Bone", RigidTransform3d::Identity());
		graphics->setBonePose("Bone_001", pose);
		graphics->setBonePose("Bone_002", pose);
		graphics->setBonePose("Bone_003", pose);

		/// The total number of steps should complete in 5 seconds
		boost::this_thread::sleep(boost::posix_time::milliseconds(5000 / numSteps));
	}

	runtime->stop();
}
コード例 #2
0
void AnimController::priv_walk_anim_node( PyramidObject *node )
{
	setBonePose( node );

	PyramidObject *child = 0;

	if (node->getChild() != 0)	{
		child = (PyramidObject *)node->getChild();
		while (child != 0)	{
			priv_walk_anim_node( child );
			child = (PyramidObject *)child->getSibling();
		}
	}
}
コード例 #3
0
void Teddy::walk_anim_node(GameObject *node )
{
	setBonePose( node );
   
	// --------- Do pose stuff here -----------------------
	GameObject *child = 0;

	// iterate through all of the active children 
	if (node->getChild() != 0)
	{  
		child =	(GameObject *)node->getChild();
		// make sure that allocation is not a child node 
		while (child != 0)
		{
			walk_anim_node( child );
			// goto next sibling
			child = (GameObject *)child->getSibling();
		}
	}
	else
	{
		// bye bye exit condition
	}
}