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; }
///////////////////////////////////////// // 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; }