示例#1
0
def loadModel(file, collision=None, animation=None):
    model=None
    if animation:
        model=Actor(file, animation)                   
        #default anim
        if 'default' in animation:
            model.loop('default')
        elif 'idle' in animation:
            model.loop('idle')
        else: #some random anim
             model.loop(animation.items()[0])
    else:
        model=loader.loadModel(file)
    model.setPythonTag('model_file', file)
    #load shaders
    for geom in model.findAllMatches('**/+GeomNode'):
        if geom.hasTag('light'):
            model.setPythonTag('hasLight', True)
        if geom.hasTag('particle'):
            file='particle/'+geom.getTag('particle')
            if os.path.exists(file):
                with open(file) as f:  
                    values=json.load(f)
                p=createEffect(values)                
                model.setPythonTag('particle', p)    
                p.start(parent=model, renderParent=render) 
        if geom.hasTag('cg_shader'):            
            geom.setShader(loader.loadShader("shaders/"+geom.getTag('cg_shader')))
        elif geom.hasTag('glsl_shader'):  
            glsl_shader=geom.getTag('glsl_shader')  
            geom.setShader(Shader.load(Shader.SLGLSL, "shaders/{0}_v.glsl".format(glsl_shader),"shaders/{0}_f.glsl".format(glsl_shader)))
        else:
            #geom.setShader(loader.loadShader("shaders/default.cg"))
            geom.setShader(Shader.load(Shader.SLGLSL, "shaders/default_v.glsl","shaders/default_f.glsl"))
    #collisions        
    model.setCollideMask(BitMask32.allOff())
    if collision:
        coll=loader.loadModel(collision)
        coll.reparentTo(model)
        coll.find('**/collision').setCollideMask(BitMask32.bit(2))        
        coll.find('**/collision').setPythonTag('object', model)
        if animation:
            model.setPythonTag('actor_files', [file,animation,coll]) 
    else:
        try:
            model.find('**/collision').setCollideMask(BitMask32.bit(2))        
            model.find('**/collision').setPythonTag('object', model)        
        except:
            print "WARNING: Model {0} has no collision geometry!\nGenerating collision sphere...".format(file)
            bounds=model.getBounds()
            radi=bounds.getRadius()
            cent=bounds.getCenter()
            coll_sphere=model.attachNewNode(CollisionNode('collision'))
            coll_sphere.node().addSolid(CollisionSphere(cent[0],cent[1],cent[2], radi)) 
            coll_sphere.setCollideMask(BitMask32.bit(2))        
            coll_sphere.setPythonTag('object', model)
            #coll_sphere.show()
            if animation:
                model.setPythonTag('actor_files', [file,animation,None])
    return model    
示例#2
0
 def loadModel(self, model):
     self.currentScale=1.0
     self.currentHPR=[0, 0, 0]
     self.currentZ=0.0
     self.isLocked=False
     if self.currentObject!=None:
         self.currentObject.removeNode()
     self.currentObject=loader.loadModel(model)
     self.currentObject.reparentTo(render)
     self.currentObject.setPythonTag('props', '')
     self.currentObject.setHpr(self.currentHPR[0],self.currentHPR[1],self.currentHPR[2])
     self.currentObject.setZ(self.currentZ)
     self.currentObject.setScale(self.currentScale) 
     for geom in self.currentObject.findAllMatches('**/+GeomNode'):
         if geom.hasTag('light'): 
             self.currentLight=self.lightManager.addLight(pos=self.currentObject.getPos(), color=(1.0, 1.0, 1.0), radius=10.0)
             self.currentObject.setPythonTag('hasLight', self.currentLight)
             self.currentHPR=[255.0, 255.0, 255.0]   
         if geom.hasTag('particle'):
             file='particle/'+geom.getTag('particle')
             if exists(file):
                 with open(file) as f:  
                     values=json.load(f)
                 p=createEffect(values)                
                 self.currentObject.setPythonTag('particle', p)    
                 p.start(parent=self.currentObject, renderParent=render)         
     if geom.hasTag('glsl_shader'): 
         glsl_shader=geom.getTag('glsl_shader')  
         self.currentObject.setShader(Shader.load(Shader.SLGLSL, "shaders/{0}_v.glsl".format(glsl_shader),"shaders/{0}_f.glsl".format(glsl_shader)))
     else:            
         self.currentObject.setShader(Shader.load(Shader.SLGLSL, "shaders/default_v.glsl","shaders/default_f.glsl"))
     
     if self.currentObject.find('**/navmesh_terrain'):            
         self.isLocked=True
         self.currentObject.find('**/navmesh_terrain').hide()
     if self.currentObject.find('**/navmesh_tile'):
         self.isLocked=True
         self.currentObject.find('**/navmesh_tile').hide()
     if self.currentObject.find('**/collision'):            
         self.currentObject.find('**/collision').hide()
     
     for tex_stage in self.currentObject.findAllTextureStages():            
         tex=self.currentObject.findTexture(tex_stage)
         if tex:
             file_name=tex.getFilename()
             tex_format=tex.getFormat()   
             #print tex_stage,  file_name, tex_format                
             newTex=loader.loadTexture(str(file_name)[:-3]+'dds')
             if tex_stage.getMode()==TextureStage.M_normal:
                 tex_stage.setMode(TextureStage.M_normal_gloss)
             if tex_stage.getMode()!=TextureStage.M_normal_gloss:
                 if tex_format==Texture.F_rgb:
                     tex_format=Texture.F_srgb
                 elif tex_format==Texture.F_rgba:
                     tex_format=Texture.F_srgb_alpha    
             newTex.setFormat(tex_format)
             self.currentObject.setTexture(tex_stage, newTex, 1)
示例#3
0
 def __init__(self):
     ShowBase.__init__(self)
     base.cam.setPos(0, -60, 0)
     base.enableParticles()
     with open('fire.json') as f:
         values = json.load(f)
     particle_effect = createEffect(values)
     p = ParticleEffect()
     p.loadConfig('fireish.ptf')
     p.start(parent=render, renderParent=render)
     p.setPos(5, 0, 0)
     p2 = ParticleEffect()
     p2.loadConfig('fireish2.ptf')
     p2.start(parent=render, renderParent=render)
     p2.setPos(10, 0, 0)
     self.smiley2 = loader.loadModel('smiley')
     self.smiley2.setPos(-5, 0, 0)
     vfx(self.smiley2, texture='vfx/big_fire3.png', scale=1.0).loop()
示例#4
0
def loadModel(file, collision=None, animation=None):
    model = None
    if animation:
        model = Actor(file, animation)
        #default anim
        if 'default' in animation:
            model.loop('default')
        elif 'idle' in animation:
            model.loop('idle')
        else:  #some random anim
            model.loop(animation.items()[0])
    else:
        model = loader.loadModel(file)
    model.setPythonTag('model_file', file)
    #load shaders
    for geom in model.findAllMatches('**/+GeomNode'):
        if geom.hasTag('light'):
            model.setPythonTag('hasLight', True)
        if geom.hasTag('particle'):
            file = 'particle/' + geom.getTag('particle')
            if exists(file):
                with open(file) as f:
                    values = json.load(f)
                p = createEffect(values)
                model.setPythonTag('particle', p)
                p.start(parent=model, renderParent=render)
        if geom.hasTag('cg_shader'):
            geom.setShader(
                loader.loadShader("shaders/" + geom.getTag('cg_shader')))
        elif geom.hasTag('glsl_shader'):
            glsl_shader = geom.getTag('glsl_shader')
            geom.setShader(
                Shader.load(Shader.SLGLSL,
                            "shaders/{0}_v.glsl".format(glsl_shader),
                            "shaders/{0}_f.glsl".format(glsl_shader)))
        else:
            #geom.setShader(loader.loadShader("shaders/default.cg"))
            geom.setShader(
                Shader.load(Shader.SLGLSL, "shaders/default_v.glsl",
                            "shaders/default_f.glsl"))
    #collisions
    model.setCollideMask(BitMask32.allOff())
    if collision:
        coll = loader.loadModel(collision)
        coll.reparentTo(model)
        coll.find('**/collision').setCollideMask(BitMask32.bit(2))
        coll.find('**/collision').setPythonTag('object', model)
        if animation:
            model.setPythonTag('actor_files', [file, animation, collision])
    else:
        try:
            model.find('**/collision').setCollideMask(BitMask32.bit(2))
            model.find('**/collision').setPythonTag('object', model)
        except:
            print "WARNING: Model {0} has no collision geometry!\nGenerating collision sphere...".format(
                file)
            bounds = model.getBounds()
            radi = bounds.getRadius()
            cent = bounds.getCenter()
            coll_sphere = model.attachNewNode(CollisionNode('collision'))
            coll_sphere.node().addSolid(
                CollisionSphere(cent[0], cent[1], cent[2], radi))
            coll_sphere.setCollideMask(BitMask32.bit(2))
            coll_sphere.setPythonTag('object', model)
            #coll_sphere.show()
            if animation:
                model.setPythonTag('actor_files', [file, animation, None])
    return model
示例#5
0
def loadModel(file, collision=None, animation=None):
    model=None
    if animation:
        collision=file+'/collision'
        anims={}
        dirList=listdir(file+'/animation')
        for fname in dirList:                            
            anims[fname[:-4]]=file+'/animation/'+fname
        #print anims    
        model=Actor(file+'/model', anims)                   
        #default anim
        if 'default' in anims:
            model.loop('default')
        elif 'idle' in animation:
            model.loop('idle')
        else: #some first, random anim
             model.loop(anims.items()[0])
    else:
        model=loader.loadModel(file)
    model.setPythonTag('model_file', file)
    #load shaders
    for geom in model.findAllMatches('**/+GeomNode'):
        if geom.hasTag('light'):
            model.setPythonTag('hasLight', True)
        if geom.hasTag('particle'):
            file='particle/'+geom.getTag('particle')
            if exists(file):
                with open(file) as f:  
                    values=json.load(f)
                p=createEffect(values)                
                model.setPythonTag('particle', p)    
                p.start(parent=model, renderParent=render) 
        if geom.hasTag('cg_shader'):            
            geom.setShader(loader.loadShader("shaders/"+geom.getTag('cg_shader')))
        elif geom.hasTag('glsl_shader'):  
            glsl_shader=geom.getTag('glsl_shader')  
            model.setShader(Shader.load(Shader.SLGLSL, "shaders/{0}_v.glsl".format(glsl_shader),"shaders/{0}_f.glsl".format(glsl_shader)))
        else:
            #geom.setShader(loader.loadShader("shaders/default.cg"))
            model.setShader(Shader.load(Shader.SLGLSL, "shaders/default_v.glsl","shaders/default_f.glsl"), 1)
            print "default shader!"
    #collisions        
    model.setCollideMask(BitMask32.allOff())
    if collision:
        coll=loader.loadModel(collision)
        coll.reparentTo(model)
        coll.find('**/collision').setCollideMask(BitMask32.bit(2))        
        coll.find('**/collision').setPythonTag('object', model)
        if animation:
            model.setPythonTag('actor_files', [file,anims,coll]) 
    else:
        try:
            model.find('**/collision').setCollideMask(BitMask32.bit(2))        
            model.find('**/collision').setPythonTag('object', model)        
        except:
            print "WARNING: Model {0} has no collision geometry!\nGenerating collision sphere...".format(file)
            bounds=model.getBounds()
            radi=bounds.getRadius()
            cent=bounds.getCenter()
            coll_sphere=model.attachNewNode(CollisionNode('collision'))
            coll_sphere.node().addSolid(CollisionSphere(cent[0],cent[1],cent[2], radi)) 
            coll_sphere.setCollideMask(BitMask32.bit(2))        
            coll_sphere.setPythonTag('object', model)
            #coll_sphere.show()
            if animation:
                model.setPythonTag('actor_files', [file,animation,None])
    if ConfigVariableBool('framebuffer-srgb',False).getValue():
        fixSrgbTextures(model)            
    return model
示例#6
0
    def loadModel(self, model):
        self.currentScale = 1.0
        self.currentHPR = [0, 0, 0]
        self.currentZ = 0.0
        self.isLocked = False
        if self.currentObject != None:
            self.currentObject.removeNode()
        self.currentObject = loader.loadModel(model)
        self.currentObject.reparentTo(render)
        self.currentObject.setPythonTag('props', '')
        self.currentObject.setHpr(self.currentHPR[0], self.currentHPR[1],
                                  self.currentHPR[2])
        self.currentObject.setZ(self.currentZ)
        self.currentObject.setScale(self.currentScale)
        for geom in self.currentObject.findAllMatches('**/+GeomNode'):
            if geom.hasTag('light'):
                self.currentLight = self.lightManager.addLight(
                    pos=self.currentObject.getPos(),
                    color=(1.0, 1.0, 1.0),
                    radius=10.0)
                self.currentObject.setPythonTag('hasLight', self.currentLight)
                self.currentHPR = [255.0, 255.0, 255.0]
            if geom.hasTag('particle'):
                file = 'particle/' + geom.getTag('particle')
                if exists(file):
                    with open(file) as f:
                        values = json.load(f)
                    p = createEffect(values)
                    self.currentObject.setPythonTag('particle', p)
                    p.start(parent=self.currentObject, renderParent=render)
        if geom.hasTag('glsl_shader'):
            glsl_shader = geom.getTag('glsl_shader')
            self.currentObject.setShader(
                Shader.load(Shader.SLGLSL,
                            "shaders/{0}_v.glsl".format(glsl_shader),
                            "shaders/{0}_f.glsl".format(glsl_shader)))
        else:
            self.currentObject.setShader(
                Shader.load(Shader.SLGLSL, "shaders/default_v.glsl",
                            "shaders/default_f.glsl"))

        if self.currentObject.find('**/navmesh_terrain'):
            self.isLocked = True
            self.currentObject.find('**/navmesh_terrain').hide()
        if self.currentObject.find('**/navmesh_tile'):
            self.isLocked = True
            self.currentObject.find('**/navmesh_tile').hide()
        if self.currentObject.find('**/collision'):
            self.currentObject.find('**/collision').hide()

        for tex_stage in self.currentObject.findAllTextureStages():
            tex = self.currentObject.findTexture(tex_stage)
            if tex:
                file_name = tex.getFilename()
                tex_format = tex.getFormat()
                #print tex_stage,  file_name, tex_format
                newTex = loader.loadTexture(str(file_name)[:-3] + 'dds')
                if tex_stage.getMode() == TextureStage.M_normal:
                    tex_stage.setMode(TextureStage.M_normal_gloss)
                if tex_stage.getMode() != TextureStage.M_normal_gloss:
                    if tex_format == Texture.F_rgb:
                        tex_format = Texture.F_srgb
                    elif tex_format == Texture.F_rgba:
                        tex_format = Texture.F_srgb_alpha
                newTex.setFormat(tex_format)
                self.currentObject.setTexture(tex_stage, newTex, 1)
示例#7
0
def loadModel(file, collision=None, animation=None):
    model = None
    if animation:
        collision = file + '/collision'
        anims = {}
        dirList = listdir(file + '/animation')
        for fname in dirList:
            anims[fname[:-4]] = file + '/animation/' + fname
        #print anims
        model = Actor(file + '/model', anims)
        #default anim
        if 'default' in anims:
            model.loop('default')
        elif 'idle' in animation:
            model.loop('idle')
        else:  #some first, random anim
            model.loop(list(anims.items())[0])
    else:
        model = loader.loadModel(file)
    model.setPythonTag('model_file', file)
    #load shaders
    for geom in model.findAllMatches('**/+GeomNode'):
        if geom.hasTag('light'):
            model.setPythonTag('hasLight', True)
        if geom.hasTag('particle'):
            file = 'particle/' + geom.getTag('particle')
            if exists(file):
                with open(file) as f:
                    values = json.load(f)
                p = createEffect(values)
                model.setPythonTag('particle', p)
                p.start(parent=model, renderParent=render)
        if geom.hasTag('cg_shader'):
            geom.setShader(
                loader.loadShader("shaders/" + geom.getTag('cg_shader')))
        elif geom.hasTag('glsl_shader'):
            glsl_shader = geom.getTag('glsl_shader')
            model.setShader(
                Shader.load(Shader.SLGLSL,
                            "shaders/{0}_v.glsl".format(glsl_shader),
                            "shaders/{0}_f.glsl".format(glsl_shader)))
        else:
            #geom.setShader(loader.loadShader("shaders/default.cg"))
            model.setShader(
                Shader.load(Shader.SLGLSL, "shaders/default_v.glsl",
                            "shaders/default_f.glsl"), 1)
            print("default shader!")
    #collisions
    model.setCollideMask(BitMask32.allOff())
    if collision:
        coll = loader.loadModel(collision)
        coll.reparentTo(model)
        coll.find('**/collision').setCollideMask(BitMask32.bit(2))
        coll.find('**/collision').setPythonTag('object', model)
        if animation:
            model.setPythonTag('actor_files', [file, anims, coll])
    else:
        try:
            model.find('**/collision').setCollideMask(BitMask32.bit(2))
            model.find('**/collision').setPythonTag('object', model)
        except:
            print(
                "WARNING: Model {0} has no collision geometry!\nGenerating collision sphere..."
                .format(file))
            bounds = model.getBounds()
            radi = bounds.getRadius()
            cent = bounds.getCenter()
            coll_sphere = model.attachNewNode(CollisionNode('collision'))
            coll_sphere.node().addSolid(
                CollisionSphere(cent[0], cent[1], cent[2], radi))
            coll_sphere.setCollideMask(BitMask32.bit(2))
            coll_sphere.setPythonTag('object', model)
            #coll_sphere.show()
            if animation:
                model.setPythonTag('actor_files', [file, animation, None])
    if ConfigVariableBool('framebuffer-srgb', False).getValue():
        fixSrgbTextures(model)
    return model