void InitNx() { // Create a memory allocator gAllocator = new UserAllocator; // Create the physics SDK gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, gAllocator, &gErrorStream); if (0 == gPhysicsSDK) return; //This should be update for compatible with GPU and PPU!!! // Check for hardware availability NxHWVersion hwCheck = gPhysicsSDK->getHWVersion(); if (hwCheck == NX_HW_VERSION_NONE) { printf("Unable to find any NVIDIA PhysX hardware, this sample requires hardware physics to run. Please make sure that you have correctly installed the latest version of the NVIDIA PhysX SDK.\n"); gPhysicsSDK->release(); gPhysicsSDK = 0; NX_DELETE_SINGLE(gAllocator); exit(1); } // Set the physics parameters gPhysicsSDK->setParameter(NX_SKIN_WIDTH, 0.05); // Set the debug visualization parameters gPhysicsSDK->setParameter(NX_VISUALIZATION_SCALE, 1); gPhysicsSDK->setParameter(NX_VISUALIZE_COLLISION_SHAPES, 1); gPhysicsSDK->setParameter(NX_VISUALIZE_ACTOR_AXES, 1); gPhysicsSDK->setParameter(NX_VISUALIZE_COLLISION_FNORMALS, 1); CreateScenario(); }
void KeyboardCallback(unsigned char key, int /*x*/, int /*y*/) { gKeys[key] = true; switch (key) { case 'r': { SelectNextActor(); break; } case 'c': { bHWScene = !bHWScene; CreateScenario(); break; } default: { break; } } }
bool UmcFramework::LoadScenarios() { apr_xml_doc* pDoc = LoadDocument(); if(!pDoc) return false; const apr_xml_attr* pAttr; const apr_xml_elem* pElem; const apr_xml_elem* pRoot = pDoc->root; if(!pRoot || strcasecmp(pRoot->name,"umcscenarios") != 0) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Document"); return FALSE; } for(pElem = pRoot->first_child; pElem; pElem = pElem->next) { if(strcasecmp(pElem->name,"scenario") != 0) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Element <%s>",pElem->name); continue; } const char* pName = NULL; const char* pClass = NULL; const char* pMrcpProfile = NULL; for(pAttr = pElem->attr; pAttr; pAttr = pAttr->next) { if(strcasecmp(pAttr->name,"name") == 0) { pName = pAttr->value; } else if(strcasecmp(pAttr->name,"class") == 0) { pClass = pAttr->value; } else if(strcasecmp(pAttr->name,"profile") == 0) { pMrcpProfile = pAttr->value; } } if(pName && pClass) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Load Scenario name [%s] class [%s]",pName,pClass); UmcScenario* pScenario = CreateScenario(pClass); if(pScenario) { pScenario->SetDirLayout(m_pDirLayout); pScenario->SetName(pName); pScenario->SetMrcpProfile(pMrcpProfile); if(pScenario->Load(pElem,m_pPool)) apr_hash_set(m_pScenarioTable,pScenario->GetName(),APR_HASH_KEY_STRING,pScenario); else delete pScenario; } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"No such scenario <%s>",pClass); } } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Missing either name or class of the scenario"); } } return true; }
bool UmcFramework::LoadScenario(const char* pFilePath) { apr_xml_parser* pParser = NULL; apr_xml_doc* pDoc = NULL; apr_file_t* pFD = NULL; const apr_xml_attr* pAttr; const apr_xml_elem* pRoot; const char* pName = NULL; const char* pClass = NULL; const char* pMrcpProfile = NULL; apr_status_t rv; apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Open Scenario File [%s]",pFilePath); rv = apr_file_open(&pFD,pFilePath,APR_READ|APR_BINARY,0,m_pPool); if(rv != APR_SUCCESS) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Open Scenario File [%s]",pFilePath); return false; } rv = apr_xml_parse_file(m_pPool,&pParser,&pDoc,pFD,2000); apr_file_close(pFD); if(rv != APR_SUCCESS) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Parse Scenario File [%s]",pFilePath); return false; } pRoot = pDoc->root; if(!pRoot || strcasecmp(pRoot->name,"umcscenario") != 0) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Document"); return false; } for(pAttr = pRoot->attr; pAttr; pAttr = pAttr->next) { if(strcasecmp(pAttr->name,"name") == 0) { pName = pAttr->value; } else if(strcasecmp(pAttr->name,"class") == 0) { pClass = pAttr->value; } else if(strcasecmp(pAttr->name,"profile") == 0) { pMrcpProfile = pAttr->value; } } if(!pName) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Missing Scenario Name"); return false; } if(!pClass) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Missing Scenario Class"); return false; } apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Load Scenario Name [%s] Class [%s]",pName,pClass); UmcScenario* pScenario = CreateScenario(pClass); if(!pScenario) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"No Such Scenario Class [%s]",pClass); return false; } pScenario->SetDirLayout(m_pDirLayout); pScenario->SetName(pName); pScenario->SetMrcpProfile(pMrcpProfile); if(!pScenario->Load(pRoot,m_pPool)) { delete pScenario; return false; } apr_hash_set(m_pScenarioTable,pScenario->GetName(),APR_HASH_KEY_STRING,pScenario); return true; }