Show
Ignore:
Timestamp:
10/21/14 17:10:27 (31 hours ago)
Author:
robert
Message:

Added shaders to support experimental shader based displacement mapping technique osgTerrain::ShaderTerrain?.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/fbx/ReaderWriterFBX.cpp

    r13464 r13466  
    9090class CleanUpFbx 
    9191{ 
    92     KFbxSdkManager* m_pSdkManager; 
     92    FbxManager* m_pSdkManager; 
    9393public: 
    94     explicit CleanUpFbx(KFbxSdkManager* pSdkManager) : m_pSdkManager(pSdkManager) 
     94    explicit CleanUpFbx(FbxManager* pSdkManager) : m_pSdkManager(pSdkManager) 
    9595    {} 
    9696 
     
    103103//Some files don't correctly mark their skeleton nodes, so this function infers 
    104104//them from the nodes that skin deformers linked to. 
    105 void findLinkedFbxSkeletonNodes(KFbxNode* pNode, std::set<const KFbxNode*>& fbxSkeletons) 
     105void findLinkedFbxSkeletonNodes(FbxNode* pNode, std::set<const FbxNode*>& fbxSkeletons) 
    106106{ 
    107     if (const KFbxGeometry* pMesh = KFbxCast<KFbxGeometry>(pNode->GetNodeAttribute())) 
    108     { 
    109         for (int i = 0; i < pMesh->GetDeformerCount(KFbxDeformer::eSKIN); ++i) 
    110         { 
    111             const KFbxSkin* pSkin = (const KFbxSkin*)pMesh->GetDeformer(i, KFbxDeformer::eSKIN); 
     107    if (const FbxGeometry* pMesh = FbxCast<FbxGeometry>(pNode->GetNodeAttribute())) 
     108    { 
     109        for (int i = 0; i < pMesh->GetDeformerCount(FbxDeformer::eSkin); ++i) 
     110        { 
     111            const FbxSkin* pSkin = (const FbxSkin*)pMesh->GetDeformer(i, FbxDeformer::eSkin); 
    112112 
    113113            for (int j = 0; j < pSkin->GetClusterCount(); ++j) 
    114114            { 
    115                 const KFbxNode* pSkeleton = pSkin->GetCluster(j)->GetLink(); 
     115                const FbxNode* pSkeleton = pSkin->GetCluster(j)->GetLink(); 
    116116                fbxSkeletons.insert(pSkeleton); 
    117117            } 
     
    128128    osg::Node& root, 
    129129    const BindMatrixMap& boneBindMatrices, 
    130     const std::map<KFbxNode*, osg::Node*>& nodeMap) 
     130    const std::map<FbxNode*, osg::Node*>& nodeMap) 
    131131{ 
    132132    std::set<std::string> nodeNames; 
    133     for (std::map<KFbxNode*, osg::Node*>::const_iterator it = nodeMap.begin(); it != nodeMap.end(); ++it) 
     133    for (std::map<FbxNode*, osg::Node*>::const_iterator it = nodeMap.begin(); it != nodeMap.end(); ++it) 
    134134    { 
    135135        nodeNames.insert(it->second->getName()); 
     
    139139        it != boneBindMatrices.end();) 
    140140    { 
    141         KFbxNode* const fbxBone = it->first.first; 
    142         std::map<KFbxNode*, osg::Node*>::const_iterator nodeIt = nodeMap.find(fbxBone); 
     141        FbxNode* const fbxBone = it->first.first; 
     142        std::map<FbxNode*, osg::Node*>::const_iterator nodeIt = nodeMap.find(fbxBone); 
    143143        if (nodeIt != nodeMap.end()) 
    144144        { 
     
    209209        if (filename.empty()) return ReadResult::FILE_NOT_FOUND; 
    210210 
    211         KFbxSdkManager* pSdkManager = KFbxSdkManager::Create(); 
     211        FbxManager* pSdkManager = FbxManager::Create(); 
    212212 
    213213        if (!pSdkManager) 
     
    218218        CleanUpFbx cleanUpFbx(pSdkManager); 
    219219 
    220         pSdkManager->SetIOSettings(KFbxIOSettings::Create(pSdkManager, IOSROOT)); 
    221  
    222         KFbxScene* pScene = KFbxScene::Create(pSdkManager, ""); 
     220        pSdkManager->SetIOSettings(FbxIOSettings::Create(pSdkManager, IOSROOT)); 
     221 
     222        FbxScene* pScene = FbxScene::Create(pSdkManager, ""); 
    223223 
    224224        // The FBX SDK interprets the filename as UTF-8 
     
    229229#endif 
    230230 
    231         KFbxImporter* lImporter = KFbxImporter::Create(pSdkManager, ""); 
     231        FbxImporter* lImporter = FbxImporter::Create(pSdkManager, ""); 
    232232 
    233233        if (!lImporter->Initialize(utf8filename.c_str(), -1, pSdkManager->GetIOSettings())) 
    234234        { 
     235#if FBXSDK_VERSION_MAJOR < 2014 
    235236            return std::string(lImporter->GetLastErrorString()); 
     237#else 
     238            return std::string(lImporter->GetStatus().GetErrorString()); 
     239#endif 
    236240        } 
    237241 
     
    241245        } 
    242246 
    243         for (int i = 0; KFbxTakeInfo* lTakeInfo = lImporter->GetTakeInfo(i); i++) 
     247        for (int i = 0; FbxTakeInfo* lTakeInfo = lImporter->GetTakeInfo(i); i++) 
    244248        { 
    245249            lTakeInfo->mSelect = true; 
     
    248252        if (!lImporter->Import(pScene)) 
    249253        { 
     254#if FBXSDK_VERSION_MAJOR < 2014 
    250255            return std::string(lImporter->GetLastErrorString()); 
    251         } 
    252  
    253         //KFbxAxisSystem::OpenGL.ConvertScene(pScene);        // Doesn't work as expected. Still need to transform vertices. 
    254  
    255         if (KFbxNode* pNode = pScene->GetRootNode()) 
     256#else  
     257            return std::string(lImporter->GetStatus().GetErrorString()); 
     258#endif 
     259        } 
     260 
     261        //FbxAxisSystem::OpenGL.ConvertScene(pScene);        // Doesn't work as expected. Still need to transform vertices. 
     262 
     263        if (FbxNode* pNode = pScene->GetRootNode()) 
    256264        { 
    257265            bool useFbxRoot = false; 
     
    291299            FbxMaterialToOsgStateSet fbxMaterialToOsgStateSet(filePath, localOptions.get(), lightmapTextures); 
    292300 
    293             std::set<const KFbxNode*> fbxSkeletons; 
     301            std::set<const FbxNode*> fbxSkeletons; 
    294302            findLinkedFbxSkeletonNodes(pNode, fbxSkeletons); 
    295303 
    296304            OsgFbxReader::AuthoringTool authoringTool = OsgFbxReader::UNKNOWN; 
    297             if (KFbxDocumentInfo* pDocInfo = pScene->GetDocumentInfo()) 
     305            if (FbxDocumentInfo* pDocInfo = pScene->GetDocumentInfo()) 
    298306            { 
    299307                struct ToolName 
     
    308316                }; 
    309317 
    310                 fbxString appName = pDocInfo->LastSaved_ApplicationName.Get(); 
     318                FbxString appName = pDocInfo->LastSaved_ApplicationName.Get(); 
    311319 
    312320                for (unsigned int i = 0; i < sizeof(authoringTools) / sizeof(authoringTools[0]); ++i) 
     
    345353 
    346354                osg::Node* osgNode = res.getNode(); 
    347                 for (int light = 0; light < nLightCount; ++light) 
    348                     osgNode->getOrCreateStateSet()->setMode(GL_LIGHT0 + light, osg::StateAttribute::ON); 
    349  
    350355                osgNode->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON); 
    351356                osgNode->getOrCreateStateSet()->setMode(GL_NORMALIZE,osg::StateAttribute::ON); 
     
    365370                } 
    366371 
    367                 KFbxAxisSystem fbxAxis = pScene->GetGlobalSettings().GetAxisSystem(); 
    368  
    369                 if (fbxAxis != KFbxAxisSystem::OpenGL) 
     372                FbxAxisSystem fbxAxis = pScene->GetGlobalSettings().GetAxisSystem(); 
     373 
     374                if (fbxAxis != FbxAxisSystem::OpenGL) 
    370375                { 
    371376                    int upSign; 
    372                     KFbxAxisSystem::eUpVector eUp = fbxAxis.GetUpVector(upSign); 
    373                     bool bLeftHanded = fbxAxis.GetCoorSystem() == KFbxAxisSystem::LeftHanded; 
     377                    FbxAxisSystem::EUpVector eUp = fbxAxis.GetUpVector(upSign); 
     378                    bool bLeftHanded = fbxAxis.GetCoorSystem() == FbxAxisSystem::eLeftHanded; 
    374379                    float fSign = upSign < 0 ? -1.0f : 1.0f; 
    375380                    float zScale = bLeftHanded ? -1.0f : 1.0f; 
     
    378383                    switch (eUp) 
    379384                    { 
    380                     case KFbxAxisSystem::XAxis: 
     385                    case FbxAxisSystem::eXAxis: 
    381386                        mat.set(0,fSign,0,0,-fSign,0,0,0,0,0,zScale,0,0,0,0,1); 
    382387                        break; 
    383                     case KFbxAxisSystem::YAxis: 
     388                    case FbxAxisSystem::eYAxis: 
    384389                        mat.set(1,0,0,0,0,fSign,0,0,0,0,fSign*zScale,0,0,0,0,1); 
    385390                        break; 
    386                     case KFbxAxisSystem::ZAxis: 
     391                    case FbxAxisSystem::eZAxis: 
    387392                        mat.set(1,0,0,0,0,0,-fSign*zScale,0,0,fSign,0,0,0,0,0,1); 
    388393                        break; 
     
    444449        localOptions->getDatabasePathList().push_front(osgDB::getFilePath(filename)); 
    445450 
    446         KFbxSdkManager* pSdkManager = KFbxSdkManager::Create(); 
     451        FbxManager* pSdkManager = FbxManager::Create(); 
    447452 
    448453        if (!pSdkManager) 
     
    453458        CleanUpFbx cleanUpFbx(pSdkManager); 
    454459 
    455         pSdkManager->SetIOSettings(KFbxIOSettings::Create(pSdkManager, IOSROOT)); 
     460        pSdkManager->SetIOSettings(FbxIOSettings::Create(pSdkManager, IOSROOT)); 
    456461 
    457462        bool useFbxRoot = false; 
     
    473478        } 
    474479 
    475         KFbxScene* pScene = KFbxScene::Create(pSdkManager, ""); 
     480        FbxScene* pScene = FbxScene::Create(pSdkManager, ""); 
    476481        pluginfbx::WriterNodeVisitor writerNodeVisitor(pScene, pSdkManager, filename, 
    477482            options, osgDB::getFilePath(node.getName().empty() ? filename : node.getName())); 
     
    490495        } 
    491496 
    492         KFbxDocumentInfo* pDocInfo = pScene->GetDocumentInfo(); 
     497        FbxDocumentInfo* pDocInfo = pScene->GetDocumentInfo(); 
    493498        bool needNewDocInfo = pDocInfo != NULL; 
    494499        if (needNewDocInfo) 
    495500        { 
    496             pDocInfo = KFbxDocumentInfo::Create(pSdkManager, ""); 
    497         } 
    498         pDocInfo->LastSaved_ApplicationName.Set(fbxString("OpenSceneGraph")); 
    499         pDocInfo->LastSaved_ApplicationVersion.Set(fbxString(osgGetVersion())); 
     501            pDocInfo = FbxDocumentInfo::Create(pSdkManager, ""); 
     502        } 
     503        pDocInfo->LastSaved_ApplicationName.Set(FbxString("OpenSceneGraph")); 
     504        pDocInfo->LastSaved_ApplicationVersion.Set(FbxString(osgGetVersion())); 
    500505        if (needNewDocInfo) 
    501506        { 
     
    503508        } 
    504509 
    505         KFbxExporter* lExporter = KFbxExporter::Create(pSdkManager, ""); 
    506         pScene->GetGlobalSettings().SetAxisSystem(KFbxAxisSystem::eOpenGL); 
     510        FbxExporter* lExporter = FbxExporter::Create(pSdkManager, ""); 
     511        pScene->GetGlobalSettings().SetAxisSystem(FbxAxisSystem::eOpenGL); 
    507512 
    508513        // Ensure the directory exists or else the FBX SDK will fail 
     
    520525        if (!lExporter->Initialize(utf8filename.c_str())) 
    521526        { 
     527#if FBXSDK_VERSION_MAJOR < 2014 
    522528            return std::string(lExporter->GetLastErrorString()); 
     529#else 
     530            return std::string(lExporter->GetStatus().GetErrorString()); 
     531#endif 
    523532        } 
    524533        if (!lExporter->Export(pScene)) 
    525534        { 
     535#if FBXSDK_VERSION_MAJOR < 2014 
    526536            return std::string(lExporter->GetLastErrorString()); 
     537#else 
     538            return std::string(lExporter->GetStatus().GetErrorString()); 
     539#endif 
    527540        } 
    528541