def saveTerrain(self): ### There is a bug somewhere in the code, I should be able to use ### self.terrainInfo but the data isn't there ## check data array ##for j in xrange(self.terrainInfo.getHeight()): ## for i in xrange(self.terrainInfo.getWidth()): ## if self.terrainInfo.at(i, j)>0.5: ## print self.terrainInfo.at(i, j) ## HACK self.terrainInfo = self.getTerrainInfo() ## save terrain map image = ogre.Image() ET.saveHeightmapToImage(self.terrainInfo, image) image.save( os.path.join(self.mediadir, "ET/ETterrain.png") ) ## save the splatting maps for i in xrange(self.splatMgr.getNumMaps()): self.splatMgr.saveMapToImage(i, image) filename = os.path.join(self.mediadir, "ET/ETcoverage.%s.%s" % ( str(i) , "png") ) print "Saving Splatting Map %s " %filename image.save( filename ) ## save light map lightmap = ogre.Image() ET.createTerrainLightmap( self.terrainInfo , lightmap, 512, 512 , ogre.Vector3(1, -1, 1) , ogre.ColourValue(1 ,1, 1) , ogre.ColourValue(1, 1, 1) ) lightmap.save(os.path.join(self.mediadir,"ET/ETlightmap.png") ) ## generate a base texture for this terrain (could be used for older hardware instead of splatting) textures = [] for i in range(6): image = ogre.Image() textures.append(image) textures[i].load("splatting%s.%s" %( str(i), "png" ) , "ET") ## create the base texture baseTexture = ogre.Image() self.splatMgr.createBaseTexture(baseTexture, 512, 512, textures, 20, 20) baseTexture.save(os.path.join(self.mediadir,"ET/ETbase.png")) ## finally create a minimap using the lightmap and the generated base texture minimap = ET.createMinimap(baseTexture, lightmap) print "Saving MinMap to ", os.path.join(self.mediadir,"ET/ETminimap.png") minimap.save(os.path.join(self.mediadir,"ET/ETminimap.png"))
def updateLightmap(self): ## HACK self.terrainInfo = self.getTerrainInfo() lightmap = ogre.Image() ET.createTerrainLightmap( self.terrainInfo , lightmap, 128, 128 , ogre.Vector3(1, -1, 1) , ogre.ColourValue(1 ,1, 1) , ogre.ColourValue(0.3, 0.3, 0.3) ) ## get our dynamic texture and update its contents tex = ogre.TextureManager.getSingleton().getByName("ETLightmap") l = lightmap.getPixelBox(0, 0) tex.getBuffer(0, 0).blitFromMemory(lightmap.getPixelBox(0, 0))
def updateLightMap(self): return decalCursorWasVisible = False if self.decalCursor.m_bVisible: self.decalCursor.hide() decalCursorWasVisible = True lightmap = og.Image() ET.createTerrainLightmap( self.terrainManager.getTerrainInfo() , lightmap, 128, 128 , og.Vector3(1, -1, 1) , og.ColourValue(1 ,1, 1) , og.ColourValue(0.3, 0.3, 0.3) ) ## get our dynamic texture and update its contents tex = og.TextureManager.getSingleton().getByName("ETLightmap") l = lightmap.getPixelBox(0, 0) tex.getBuffer(0, 0).blitFromMemory(lightmap.getPixelBox(0, 0)) if decalCursorWasVisible: self.decalCursor.show()
def _createScene(self): self.sceneManager.ambientLight = ogre.ColourValue(0.5, 0.5, 0.5) ## Create a skydome ## self.sceneManager.setSkyDome(True, "Examples/CloudySky", 5, 8) ## create terrain manager self.terrainMgr = ET.TerrainManager(self.sceneManager) self.terrainMgr.setLODErrorMargin(2, self.camera.getViewport().getActualHeight()) self.terrainMgr.setUseLODMorphing(True, 0.2, "morphFactor") ## create a fresh, mid-high terrain for editing # Note try: heightMapValues = ogre.LodDistanceList() ## ET.stdVectorFloat() except: heightMapValues = ogre.stdVectorFloat() for i in xrange(129): for j in xrange(129): heightMapValues.append(float(0.50)) self.terrainInfo = ET.TerrainInfo (129, 129, heightMapValues ) ## save typing self terrainInfo = self.terrainInfo sceneManager = self.sceneManager terrainMgr = self.terrainMgr ## set position and size of the terrain terrainInfo.setExtents(ogre.AxisAlignedBox(0, 0, 0, 1500, 300, 1500)) ## now render it terrainMgr.createTerrain(terrainInfo) ## create the splatting manager self.splatMgr = ET.SplattingManager("ETSplatting", "ET", 128, 128, 3) ## specify number of splatting textures we need to handle self.splatMgr.setNumTextures(6) ## create a manual lightmap texture lightmapTex = ogre.TextureManager.getSingleton().createManual( "ETLightmap", "ET", ogre.TEX_TYPE_2D, 128, 128, 1, ogre.PF_BYTE_RGB) lightmap = ogre.Image() ET.createTerrainLightmap(terrainInfo, lightmap, 128, 128,\ ogre.Vector3(1, -1, 1),\ ogre.ColourValue().White,\ ogre.ColourValue(0.3, 0.3, 0.3,1.0)) lightmapTex.getBuffer(0, 0).blitFromMemory(lightmap.getPixelBox(0, 0)) ## load the terrain material and assign it material = ogre.MaterialManager.getSingleton().getByName("ETTerrainMaterial") self.terrainMgr.setMaterial(material) ## Set camera look point camNode = self.sceneManager.getRootSceneNode().createChildSceneNode("CamNode") camNode.setPosition( 40, 300, 580 ) camNode.attachObject(self.camera) self.camera.pitch( ogre.Degree(-30) ) self.camera.yaw( ogre.Degree(-45) ) ## CEGUI setup self.GUIRenderer = CEGUI.OgreCEGUIRenderer(self.renderWindow, ogre.RENDER_QUEUE_OVERLAY, False, 3000, self.sceneManager) self.GUIsystem = CEGUI.System(self.GUIRenderer) CEGUI.Logger.getSingleton().setLoggingLevel( CEGUI.Informative ) CEGUI.SchemeManager.getSingleton().loadScheme("TaharezLookSkin.scheme") CEGUI.MouseCursor.getSingleton().setImage("TaharezLook", "MouseArrow")
def create(self, cursorSize, arg): if arg is not None: self.name = arg["name"] self.position = og.Vector3(arg["positionX"], arg["positionY"], arg["positionZ"]) self.extends = og.Vector3(arg["extendsX"], arg["extendsY"], arg["extendsZ"]) self.terrainHeight = arg["terrainHeight"] self.terrainSize = arg["terrainSize"] + 1 self.splattingResGroup = "ETSplatting" self.splattingTextureSize = self.terrainSize = arg["terrainSize"] + 1 self.splattingNumTextures = 6 # self.splattingBaseName = arg["splattingBaseName"] # self.splattingResGroup = arg["splattingResGroup"] # self.splattingTextureSize = arg["splattingTextureSize"] # self.splattingNumTextures = arg["splattingNumTextures"] self.terrainManager = ET.TerrainManager(self.sceneManager, self.name) self.terrainManager.setLODErrorMargin(2, self.camera.getViewport().getActualHeight()) self.terrainManager.setUseLODMorphing(True, 0.2, "morphFactor") ## create a fresh, mid-high terrain for editing # Note heightMapValues = og.stdVectorFloat() ## ET.stdVectorFloat() for i in xrange(self.terrainSize): for j in xrange(self.terrainSize): heightMapValues.append(self.terrainHeight) # width, height, heightmapvalues as a float array self.terrainInfo = ET.TerrainInfo (self.terrainSize, self.terrainSize, heightMapValues ) ## save typing self terrainInfo = self.terrainInfo sceneManager = self.sceneManager terrainMgr = self.terrainManager ## set position and size of the terrain half = self.extends / 2 terrainInfo.setExtents(og.AxisAlignedBox(-half.x, -half.y, -half.z, half.x, half.y, half.z)) ## now render it terrainMgr.createTerrain(terrainInfo) ## create the splatting manager # * @param baseName base name for the map textures (will be appended by their number) # * @param group the resource group the textures will be placed in # * @param width width of the textures in pixels # * @param height height of the textures in pixels # * @param channels Number of channels per texture (must be in {1, 2, 3, 4}) self.splatMgr = ET.SplattingManager(self.splattingBaseName, self.splattingResGroup, self.terrainSize, self.terrainSize, 3) ## specify number of splatting textures we need to handle self.splatMgr.setNumTextures(self.splattingNumTextures) ## create a manual lightmap texture lightmapTex = og.TextureManager.getSingleton().createManual( "ETLightmap", self.splattingResGroup, og.TEX_TYPE_2D, self.splattingTextureSize, self.splattingTextureSize, 1, og.PF_BYTE_RGB) lightmap = og.Image() ET.createTerrainLightmap(terrainInfo, lightmap, 128, 128,\ og.Vector3(1, -1, 1),\ og.ColourValue().White,\ og.ColourValue(0.3, 0.3, 0.3,1.0)) lightmapTex.getBuffer(0, 0).blitFromMemory(lightmap.getPixelBox(0, 0)) ## load the terrain material and assign it material = og.MaterialManager.getSingleton().getByName("ETTerrainMaterial") # material = og.MaterialManager.getSingleton().getByName("Lockenwickler_Area") self.terrainManager.setMaterial(material) self.sceneNode = self.sceneManager.getSceneNode(self.name + "/Terrain") self.sceneNode.setPosition(self.position) self.parentSceneNode = self.sceneNode.getParentSceneNode() self.created = True self.decalCursor = TerrainDecalCursor.TerrainDecalCursor(self.sceneManager, material, og.Vector2(cursorSize, cursorSize), "cursorTex.png")