void masterFunc() { Octree t; vector3 cam(-0.5,-0.5, -800); vector3 camX(1,0,0); vector3 camY(0,1,0); vector3 camZ(0,0,1); BITMAP32 render(512,512); vector3 p; vector3 lightdir(-1,-1,1); vector3 lightdir2(0,1,0); lightdir.normalize(); int treeSize; char * treeBuffer; //t.loadFromBitmaps("./dicom/IM_0001%03d.bmp", 200); //t.writeToFile("octree.dat"); cout << "Loading octree data" << endl; t.readFromFile("octree.dat", treeBuffer, treeSize); MPI_Bcast (&treeSize, 1, MPI_INT, MASTER, MPI_COMM_WORLD); //Broadcast header with tree size MPI_Bcast (treeBuffer, treeSize, MPI_BYTE, MASTER, MPI_COMM_WORLD); //Broadcast tree cout << "Data sent from master node." << endl; int frames = 1; time_t startTime = time(0); for(int i = 0; i < frames; i++) { double xcenter = 30, zcenter = -25, radius = 500; RaytraceCamera camera(vector3(xcenter+radius*cos(i*2*PI/frames)+1,-9,zcenter+radius*sin(i*2*PI/frames)+1), vector3(xcenter,-10,zcenter)); cout << "Generating rays..." << endl; vector<RayPixel> rays = camera.generateRays(512,512); cout << rays.size() << " rays generated." << endl; traceRays(rays, t, render); cout << "Loop " << i << ": done tracing rays!" << endl; time_t seconds = time(0); cout << "Frame " << i << " done at " << difftime(seconds, startTime) << endl; exportBMP(render,"render" + toString(i) + ".bmp"); } }
void OgreWidget::setupTerrain() { // bool blankTerrain = false; mTerrainPos = Ogre::Vector3(1.0, -75.1, 1.0); // mEditMarker = ogreSceneManager->createEntity("editMarker", "sphere.mesh"); // mEditNode = ogreSceneManager->getRootSceneNode()->createChildSceneNode(); // mEditNode->attachObject(mEditMarker); // mEditNode->setScale(0.05, 0.05, 0.05); // These two lines makes the terrain textures look nicer: Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(Ogre::TFO_ANISOTROPIC); Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(7); //mSceneManager->setFog(Ogre::FOG_EXP, Ogre::ColourValue(0.1, 0.1, 0.1), 0.01, 500, 1000); Ogre::LogManager::getSingleton().setLogDetail(Ogre::LL_BOREME); // Set up directional and ambient lights // THis first light is used for terrain shadows Ogre::Vector3 lightdir(-0.55, -0.3, 0.75); lightdir.normalise(); Ogre::Light* light = mSceneManager->createLight("tstLight"); light->setType(Ogre::Light::LT_DIRECTIONAL); light->setDirection(lightdir); light->setDiffuseColour(Ogre::ColourValue(1.0, 1.0, 1.0)); light->setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4)); mSceneManager->setAmbientLight(Ogre::ColourValue(0.3, 0.3, 0.3)); Ogre::Vector3 lightdir2(-0.55, -0.3, -0.75); lightdir2.normalise(); Ogre::Light* light2 = mSceneManager->createLight("tstLight2"); light2->setType(Ogre::Light::LT_DIRECTIONAL); light2->setDirection(lightdir2); light2->setDiffuseColour(Ogre::ColourValue(0.4, 0.4, 0.4)); light2->setSpecularColour(Ogre::ColourValue(0.2, 0.2, 0.2)); Ogre::Vector3 lightdir3(0.55, -0.2, -0.75); lightdir3.normalise(); Ogre::Light* light3 = mSceneManager->createLight("tstLight3"); light3->setType(Ogre::Light::LT_DIRECTIONAL); light3->setDirection(lightdir3); light3->setDiffuseColour(Ogre::ColourValue(0.5, 0.5, 0.5)); light3->setSpecularColour(Ogre::ColourValue(0.1, 0.1, 0.1)); Ogre::Vector3 lightdir4(-0.55, -0.2, 0.75); lightdir4.normalise(); Ogre::Light* light4 = mSceneManager->createLight("tstLight4"); light4->setType(Ogre::Light::LT_DIRECTIONAL); light4->setDirection(lightdir4); light4->setDiffuseColour(Ogre::ColourValue(0.3, 0.3, 0.3)); light4->setSpecularColour(Ogre::ColourValue(0.2, 0.2, 0.2)); mTerrainGroup = new Ogre::TerrainGroup(mSceneManager, Ogre::Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE); mTerrainGroup->setFilenameConvention(Ogre::String("cachedterrain"), Ogre::String("dat")); mTerrainGroup->setOrigin(mTerrainPos); mTerrainGlobals = new Ogre::TerrainGlobalOptions(); configureTerrainDefaults(light); for(long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x) for (long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y) defineTerrain(x, y); // sync load since we NEED everything in place when we start mTerrainGroup->loadAllTerrains(true); // calculate the blend maps of all terrains if(mTerrainsImported) { Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator(); while(ti.hasMoreElements()) { Ogre::Terrain* t = ti.getNext()->instance; initBlendMaps(t); } } mTerrainGroup->freeTemporaryResources(); // create a few entities on the terrain placeObjectOnTerrain("tudorhouse.mesh", Ogre::Vector3(10, 6.4, -10), 0, Ogre::Vector3(0.012, 0.012, 0.012)); placeObjectOnTerrain("church.mesh", Ogre::Vector3(-7, 0, 22), 90); placeObjectOnTerrain("house1.mesh", Ogre::Vector3(-23, 0, -10), 20); placeObjectOnTerrain("house2.mesh", Ogre::Vector3(22, 3, 20), -120); placeObjectOnTerrain("windmill.mesh", Ogre::Vector3(-35, -0.2, 20), 120); // palmtree placeObjectOnTerrain("tree1.mesh", Ogre::Vector3(0, 0, 10), 00, Ogre::Vector3(0.002, 0.002, 0.002)); placeObjectOnTerrain("tree2.mesh", Ogre::Vector3(0, 0, -30), 10, Ogre::Vector3(0.01, 0.01, 0.01)); // big wind-skewed guy placeObjectOnTerrain("tree3.mesh", Ogre::Vector3(10, 0, 35), 20, Ogre::Vector3(0.01, 0.01, 0.01)); // ??? placeObjectOnTerrain("tree4.mesh", Ogre::Vector3(33, 0, -15), 30, Ogre::Vector3(0.01, 0.01, 0.01)); // ??? placeObjectOnTerrain("tree5.mesh", Ogre::Vector3(-40, 0, -25), 40, Ogre::Vector3(0.01, 0.01, 0.01)); // the bald tree goes into the center placeObjectOnTerrain("tree6.mesh", Ogre::Vector3(-3, 0, -2), 50, Ogre::Vector3(0.008, 0.008, 0.008)); // tanne placeObjectOnTerrain("tree7.mesh", Ogre::Vector3(-22, 0, 28), 60, Ogre::Vector3(0.003, 0.003, 0.003)); mSceneManager->setSkyBox(true, "Examples/CloudyNoonSkyBox"); }