예제 #1
0
    def generate(self, helperInfo):
        color = self.mapObject.getPropertyValue("_light",
                                                default=Vec4(
                                                    255, 255, 255, 255))
        color = CIGlobals.colorFromRGBScalar255(color)
        color = CIGlobals.vec3GammaToLinear(color)

        constant = float(
            self.mapObject.getPropertyValue("_constant_attn", default="0.0"))
        linear = float(
            self.mapObject.getPropertyValue("_linear_attn", default="0.0"))
        quadratic = float(
            self.mapObject.getPropertyValue("_quadratic_attn", default="1.0"))

        # Scale intensity for unit 100 distance
        ratio = (constant + 100 * linear + 100 * 100 * quadratic)
        if ratio > 0:
            color *= ratio

        pl = Spotlight("lightHelper-light_spot")
        pl.setColor(Vec4(color[0], color[1], color[2], 1.0))
        pl.setAttenuation(Vec3(constant, linear, quadratic))
        pl.setExponent(self.mapObject.getPropertyValue("_exponent"))
        pl.setMaxDistance(self.mapObject.getPropertyValue("_distance"))
        pl.getLens().setFov(self.mapObject.getPropertyValue("_cone"))
        pl.getLens().setViewHpr(0, -90, 0)
        self.light = self.mapObject.helperRoot.attachNewNode(pl)
        if self.mapObject.doc.numlights < 64:
            self.mapObject.doc.render.setLight(self.light)
            self.mapObject.doc.numlights += 1
            self.hasLight = True
예제 #2
0
    def __init__(self):

        loadPrcFile('config.prc')
        ShowBase.__init__(self)

        base.disableMouse()
        self.render.setShaderAuto()
        self.accept("escape", sys.exit)
        # Model
        model = self.loader.loadModel("twisted")
        model.reparent_to(self.render)
        self.model = model # For reference in the rotation task
        # Light
        light = Spotlight('light')
        light_np = self.render.attachNewNode(light)
        light_np.set_pos(25, 25, 25)
        light_np.look_at(0, 0, 0)
        # Model-light interaction
        light.setShadowCaster(True)
        light.getLens().setNearFar(1, 50)
        self.render.setLight(light_np)
        # Camera
        self.camera.set_pos(0, -60, 30)
        self.camera.look_at(0, 0, 0)
        # Rotating the object
        self.taskMgr.add(self.rotate_object, 'rotate object')
        self.render.setAntialias(AntialiasAttrib.MMultisample)
예제 #3
0
파일: shader.py 프로젝트: PlumpMath/yyagl
 def set_spotlight(self, col, exp, cutoff, pos, look_at):
     lgt = Spotlight('spotlight')
     lgt.setColor(col)
     lgt.setExponent(exp)
     lgt.getLens().setFov(cutoff, cutoff)
     self.__set_lgt(lgt)
     self.lights[-1].setPos(*pos)
     self.lights[-1].lookAt(*look_at)
예제 #4
0
 def __init__(self):
     # Basics
     ShowBase.__init__(self)
     base.disableMouse()
     self.render.setShaderAuto()
     self.accept("escape", sys.exit)
     # Model
     model = self.loader.loadModel("twisted")
     model.reparent_to(self.render)
     self.model = model  # For reference in the rotation task
     # Light
     light = Spotlight('light')
     light_np = self.render.attachNewNode(light)
     light_np.set_pos(50, 50, 50)
     light_np.look_at(0, 0, 0)
     # Model-light interaction
     light.setShadowCaster(True)
     light.getLens().setNearFar(1, 100)
     self.render.setLight(light_np)
     # Camera
     self.camera.set_pos(0, -60, 30)
     self.camera.look_at(0, 0, 0)
     # Rotating the object
     self.taskMgr.add(self.rotate_object, 'rotate object')
예제 #5
0
파일: map.py 프로젝트: dKentDSU/HexEditor
class Map:
    def __init__(self,filename):
        self.height = 0
        self.width = 0
        self.waterheight = 0
        self.countries = []
        self.tileList = []
        self.tileReference = {}
        self.node = render.attachNewNode('BaseMap')
        
        self.snow = loader.loadModel("data/models/snow.bam")
        self.ice = loader.loadModel("data/models/ice.bam")
        self.plains = loader.loadModel("data/models/plains.bam")
        self.forest = loader.loadModel("data/models/forest.bam")
        self.jaggedrocks = loader.loadModel("data/models/jaggedrocks.bam")
        self.mountain = loader.loadModel("data/models/mountains.bam")
        self.desert = loader.loadModel("data/models/desert.bam")
        self.hills = loader.loadModel("data/models/hills.bam")
        self.water = loader.loadModel("data/models/water.bam")
        self.water.setTransparency(TransparencyAttrib.MAlpha)

        self.watertop = loader.loadModel("data/models/watertop.bam")
        self.waterbottom = loader.loadModel("data/models/waterbottom.bam")
        
        render.setShaderAuto()
        
        self.spot = Spotlight('World spot')
        self.spot.setColor((.7,.7,.7,1))
        self.spot.getLens().setFov(180)
        self.spot.getLens().setNearFar(1,10000000)
        self.spotNode = render.attachNewNode(self.spot)
        self.spotNode.setPos(2000,2000,5000)
        self.spotNode.lookAt(self.node)
        render.setLight(self.spotNode)
        
        self.createMap(filename)
        
        self.watertop.reparentTo(self.node)
        self.watertop.setScale(9,9,9)
        self.watertop.setPos((self.width*60)/2,-(self.height*17)/2,5)
        
        self.waterbottom.reparentTo(self.node)
        self.waterbottom.setScale(9,9,9)
        self.waterbottom.setPos((self.width*60)/2,-(self.height*17)/2,1)
        
    def getCountry(self,countryNum):
        return self.countries[countryNum]
        
    def drawMap(self):
        pass
        
    def createMap(self,filename):
        filein = open(filename,"rb")
        countryCounter = 0
        tileCounter = 0
        countryTiles = []
        countryIncome = 0
        
        for line in filein:
            words = line.split()
            if len(words) > 0:
                if words[0] == "<map>":
                    pass
                elif words[0] == "<height>":
                    self.height = eval(words[1])
                elif words[0] == "<width>":
                    self.width = eval(words[1])
                elif words[0] == "<waterheight>":
                    self.waterheight = eval(words[1])
                elif words[0] == "<tile>":
                    terrainType = eval(words[1])
                    newNode = self.node.attachNewNode('terrain'+str(tileCounter))
                    newNode.setTag('tile',str(tileCounter))
                    if terrainType == TERRAIN_WATER:
                        self.water.instanceTo(newNode)
                    elif terrainType == TERRAIN_SNOW:
                        self.snow.instanceTo(newNode)
                    elif terrainType == TERRAIN_ICE:
                        self.ice.instanceTo(newNode)
                    elif terrainType == TERRAIN_PLAINS:
                        self.plains.instanceTo(newNode)
                    elif terrainType == TERRAIN_FOREST:
                        self.forest.instanceTo(newNode)
                    elif terrainType == TERRAIN_JAGGEDROCKS:
                        self.jaggedrocks.instanceTo(newNode)
                    elif terrainType == TERRAIN_MOUNTAIN:
                        self.mountain.instanceTo(newNode)
                    elif terrainType == TERRAIN_DESERT:
                        self.desert.instanceTo(newNode)
                    elif terrainType == TERRAIN_HILLS:
                        self.hills.instanceTo(newNode)
                    x = (tileCounter % self.width)
                    y = (tileCounter / self.width)
                    if y % 2 == 0:
                        newNode.setPos(x*60,-y*17,0)
                    else:
                        newNode.setPos(x*60+30,-y*17,0)
                    newTile = Tile(terrainType,newNode,x,y,tileCounter)
                    self.tileList.append(newTile)
                    tileCounter += 1
                elif words[0] == "<income>":
                    countryIncome = eval(words[1])
                elif words[0] == "<tileNum>":
                    countryTiles.append(self.tileList[eval(words[1])])
                elif words[0] == "</country>":
                    newCountry = Country(countryTiles,countryIncome)
                    self.countries.append(newCountry)
                    countryCounter += 1
                    countryTiles = []
                    countryIncome = 0
                else:
                    pass
        #end loop
        
        for country in range(len(self.countries)):
            for tile in self.countries[country].getTiles():
                x = tile.getX()
                y = tile.getY()
                self.tileReference[(x,y)]=country
        filein.close()
        #end init   
    def getTile(self,x,y):
        #get the tile from the country it is in from spectile
        return self.countries[self.tileReference[(x,y)]].getSpecTile(x,y)
        
    def getPlayerCountries(self,playerNum):
        #return the list of countries that belong to that player
        playerCountries = []
        for country in self.countries:
            if country.getOwner() == playerNum:
                playerCountries.append(country)
        return playerCountries