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
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)
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()
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
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
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)
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