bool OsgSkeletonRepresentation::doInitialize()
{
	std::string shaderFilename;
	if (m_skinningShaderFileName.empty())
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Skinning shader file not set.";
		return false;
	}

	getRuntime()->getApplicationData()->tryFindFile(m_skinningShaderFileName, &shaderFilename);
	if (shaderFilename.empty())
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Skinning shader file (" << m_skinningShaderFileName
			<< ") not found.";
		return false;
	}

	m_skinningShader = new osg::Shader(osg::Shader::VERTEX);
	if (!m_skinningShader->loadShaderSourceFromFile(shaderFilename))
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Error loading shader (" << shaderFilename << ").";
		return false;
	}

	if (m_model == nullptr)
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Model is not set.";
		return false;
	}

	m_skeleton = dynamic_cast<osg::Node*>(m_model->getOsgNode().get());
	if (m_skeleton == nullptr)
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Model does not have a valid osgNode.";
		return false;
	}

	if (!setupBones())
	{
		SURGSIM_LOG_SEVERE(m_logger) << getName() << ": Could not find any bones in model.";
		return false;
	}

	// Setup the transform updater for the skeleton.
	m_updateVisitor = new osgUtil::UpdateVisitor();
	m_frameCount = 0;
	m_updateVisitor->setTraversalNumber(m_frameCount);
	m_base->accept(*m_updateVisitor);

	// Add the bone skeleton as a child to m_transform
	m_transform->addChild(m_base.get());

	return true;
}
Beispiel #2
0
/////////////////////////////////////////
//		M A I N
//
int main(int argc, char **argv)
{
  glutInit(&argc, argv);

  glutInitWindowSize(512, 512);
  glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
	glutInitContextVersion(3, 2); // Might not be needed in Linux
  glutCreateWindow("Them bones, them bones");

  glutDisplayFunc(DisplayWindow);
  glutTimerFunc(20, &OnTimer, 0);
  glutKeyboardFunc( keyboardFunc ); 
	glutReshapeFunc(reshape);

  // Set up depth buffer
  glEnable(GL_DEPTH_TEST);

  // initiering
#ifdef WIN32
  glewInit();
#endif
  BuildCylinder();
  setupBones();
  initBoneWeights();

  	// Build Model from cylinder data
	cylinderModel = LoadDataToModel(
			(GLfloat*) g_vertsRes,
			(GLfloat*) g_normalsRes,
			(GLfloat*) g_boneWeightVis, // texCoords
			NULL, // (GLfloat*) g_boneWeights, // colors
			(GLuint*) g_poly, // indices
			kMaxRow*kMaxCorners,
			kMaxg_poly * 3);

  g_shader = loadShaders("shader.vert" , "shader.frag");

  glutMainLoop();

 return 0;
}