void loadScene(char *name) { char line_buffer[MAX_LINE_SIZE]; fp = fopen(name,"r"); if(!fp) { /* file could not be opened properly */ fprintf(stderr,"ERROR: Scene file %s could not be loaded\n", name); fflush(stderr); exit(-1); } /* now go through all the lines in the file */ while(fgets(line_buffer, MAX_LINE_SIZE, fp)) { /* only do something if it's not a comment and the line is not blank */ if (!lineCanBeIgnored(line_buffer)) { /* at this point it is neither a comment nor a blank line */ parseScene(line_buffer); } } fclose(fp); return; }
void ofxFBXScene::parseScene(FbxNode* pNode, FbxAnimLayer * pAnimLayer, ofxFBXNode * parentNode){ ofLogVerbose("ofxFBXScene") << "found node " << pNode->GetName() << " of type " << pNode->GetTypeName() << endl; if( pNode->GetCamera() ){ ofxFBXNode * node = parseCameraInfo(pNode,pAnimLayer); if(parentNode) node->getNode().setParent(parentNode->getNode()); parentNode = node; }else if(pNode->GetMesh()){ ofxFBXNode * node = parseMeshInfo(pNode, pAnimLayer); if(parentNode) node->getNode().setParent(parentNode->getNode()); parentNode = node; }else if(pNode->GetLight()){ ofxFBXNode * node = parseLightInfo(pNode, pAnimLayer); if(parentNode) node->getNode().setParent(parentNode->getNode()); parentNode = node; }else{ ofxFBXNode node; node.nodeName = pNode->GetName(); parsePositionCurve(node,pAnimLayer,pNode->LclTranslation); parseScaleCurve(node,pAnimLayer,pNode->LclScaling); parseRotationCurve(node,pAnimLayer,pNode,pNode->LclRotation); nullsList.push_back(node); if(parentNode) nullsList.back().getNode().setParent(parentNode->getNode()); parentNode = &nullsList.back(); } //recursively traverse each node in the scene int i, lCount = pNode->GetChildCount(); for (i = 0; i < lCount; i++) { parseScene(pNode->GetChild(i), pAnimLayer, parentNode); } }
static MeshModel* parseFile() { unsigned short id; int len; in.sgetn((char*)&id, 2); in.sgetn((char*)&len, 4); if (id != CHUNK_MAIN) return 0; chunk_end = (int)in.pubseekoff(0, std::ios_base::cur) + len - 6; enterChunk(); MeshModel* root = new MeshModel(); while (int id = nextChunk()) { switch (id) { case CHUNK_SCENE: parseScene(root); break; case CHUNK_KEYFRAMER: parseKeyFramer(root); break; } } leaveChunk(); return root; }
Scene::Scene(string sceneText){ texture = Texture::loadTexBMP(wallTexture); //shapes.push_back(new Sphere(1.0,15,15, GL_POLYGON)); num_lights = 0; drawRay = false; parseScene(sceneText); drawRay = 0; }
//Loads and checks the scenefile. then calls parseScene to parse the data. bool SceneLoader::parseLevel(const Ogre::String &filename,const Ogre::String &group, Ogre::SceneManager *sceneMgr, Ogre::SceneNode *attachNode, PhysicsManager *physicsMgr, Ogre::Terrain* terrain) { //Initialize mvpXMLDoc = 0; mvpSceneMgr = sceneMgr; mvpAttachNode = attachNode; mvpPhysicsMgr = physicsMgr; TiXmlElement *XMLRoot; mvpTerrain = terrain; try { //Strip the filename Ogre::String basename, path; //stripStr(filename, basename, path); //Fetch the resource to open Ogre::DataStreamPtr pStream = Ogre::ResourceGroupManager::getSingleton().openResource(filename); //Get the string Ogre::String data = pStream->getAsString(); //Open xmldoc mvpXMLDoc = new TiXmlDocument(); mvpXMLDoc->Parse(data.c_str()); if( mvpXMLDoc->Error() ) return false; else std::cout << filename << " open..." << std::endl; } catch (...) { delete mvpXMLDoc; return false; } // Validate the File as a "Scene" file XMLRoot = mvpXMLDoc->RootElement(); if( Ogre::String( XMLRoot->Value()) != "scene" ) { delete mvpXMLDoc; return false; } // Check for passed node to attach scene if(attachNode == NULL) { mvpAttachNode = mvpSceneMgr->getRootSceneNode(); } //If all is good to here we can begin processing the scene file parseScene(XMLRoot); return true; }
bool ofxFBXScene::load(string path){ bool lResult; // Prepare the FBX SDK. InitializeSdkObjects(lSdkManager, lScene); lResult = LoadScene(lSdkManager, lScene, ofToDataPath(path).c_str()); if(!lResult){ ofLogError("ofxFBXScene") << "An error occurred while loading the scene..."; }else if(lScene){ for (int i = 0; i < lScene->GetSrcObjectCount<FbxAnimStack>(); i++) { FbxAnimStack* lAnimStack = FbxCast<FbxAnimStack>(lScene->GetSrcObject<FbxAnimStack>(i)); int l; int nbAnimLayers = lAnimStack->GetMemberCount<FbxAnimLayer>(); /*for (l = 0; l < nbAnimLayers; l++) {*/ if(nbAnimLayers){ FbxAnimLayer* lAnimLayer = lAnimStack->GetMember<FbxAnimLayer>(0); //get root node of the fbx scene FbxNode* lRootNode = lScene->GetRootNode(); parseScene(lRootNode, lAnimLayer,NULL); } } list<ofxFBXCamera>::iterator itCameras; for(itCameras=camerasList.begin();itCameras!=camerasList.end();itCameras++){ cameras.push_back(&(*itCameras)); } list<ofxFBXMesh>::iterator itMeshes; for(itMeshes=meshesList.begin();itMeshes!=meshesList.end();itMeshes++){ meshes.push_back(&(*itMeshes)); } list<ofxFBXNode>::iterator itNulls; for(itNulls=nullsList.begin();itNulls!=nullsList.end();itNulls++){ nulls.push_back(&(*itNulls)); } list<ofxFBXLight>::iterator itLights; for(itLights=lightsList.begin();itLights!=lightsList.end();itLights++){ lights.push_back(&(*itLights)); } }else{ ofLogError("ofxFBXScene") << "Null scene..."; lResult = false; } //Destroy all objects created by the FBX SDK. //DestroySdkObjects(lSdkManager,false); return lResult; }
void Level::parseLevelFile(const Ogre::String &FileName, const Ogre::String &groupName, Ogre::SceneManager *sceneMgr, Ogre::SceneNode *AttachNode, const Ogre::String &prependNode) { mGroupName = groupName; mSceneMgr = sceneMgr; mPrependNode = prependNode; TiXmlDocument *mXMLDoc = 0; TiXmlElement *mXMLRoot = 0; try { Ogre::String basename, path; Ogre::StringUtil::splitFilename(FileName, basename, path); Ogre::DataStreamPtr spStream = Ogre::ResourceGroupManager::getSingleton().openResource(basename,groupName); Ogre::String data = spStream->getAsString(); mXMLDoc = new TiXmlDocument(); mXMLDoc->Parse(data.c_str()); spStream->close(); spStream.setNull(); mXMLRoot = mXMLDoc->RootElement(); mAttachNode = AttachNode; if(!mAttachNode) mAttachNode = mSceneMgr->getRootSceneNode(); parseScene(mXMLRoot); delete mXMLDoc; } catch(Ogre::Exception e) { Ogre::LogManager::getSingleton().logMessage("Level failed to load"); delete mXMLDoc; } }
Scene::Scene(string sceneText){ //shapes.push_back(new Sphere(1.0,15,15, GL_POLYGON)); num_lights = 0; drawRay = false; parseScene(sceneText); }
Scene::Scene(std::istream& ins) :projection(NULL), view(NULL), numLights(0), shadowMapSize(windWidth*2), texUnitBase(0) { srand(0);//TODO SEED WITH TIME parseScene(ins); //create shadow map texture glGenTextures(1, &shadowMapTexture); glGenFramebuffersEXT(1, &FBOID); glGenFramebuffersEXT(1, &recordFBOID); glGenTextures(2, recordTexBase); glGenFramebuffersEXT(1, &directFBOID); glGenTextures(2, directTex); glBindTexture(GL_TEXTURE_2D, directTex[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, windWidth, windHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glBindTexture(GL_TEXTURE_2D, directTex[1]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, windWidth, windHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, directFBOID); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, directTex[0], 0); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, directTex[1], 0); glGenFramebuffersEXT(1, &splatBufFBOID); glGenTextures(1, &splatTex); glActiveTexture(texUnitEnums[0]); glBindTexture(GL_TEXTURE_2D_ARRAY, shadowMapTexture); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); std::cout << "numlights: " << numLights << std::endl; glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_DEPTH_COMPONENT, shadowMapSize, shadowMapSize, numLights, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE,NULL); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBOID); glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE); //set up splat buffer glBindTexture(GL_TEXTURE_2D, splatTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, windWidth, windHeight, 0, GL_RGBA, GL_FLOAT, NULL); //it doesn't need a depth attachment //set up "color" attachment, alpha channel with be depth glBindTexture(GL_TEXTURE_2D, recordTexBase[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, recordWidth, recordHeight, 0, GL_RGBA, GL_FLOAT, NULL); //set up depth attachment glBindTexture(GL_TEXTURE_2D, recordTexBase[1]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, recordWidth, recordHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);//window buffer loadShadowShader(); loadSplatShader(); loadFinalShader(); readCoordNormals(); // std::cout << "constructor completed" << std::endl; IMap = new float[4*recordWidth*recordHeight]; splatBuffer = new float[4*windWidth*windHeight]; timer.start(); std::cout << "before warmup" <<timer.split() << std::endl; warmupCache(1000);//generate starting records std::cout << "after warmup" << timer.split() << std::endl; }