class PlanetView(View): ready = False @classmethod def setup(cls, loader): cls.noisetex = loader.load3DTexture("texture/noise/fbm_###.tif") cls.noisestage = TextureStage('noise') cls.layer1stage = TextureStage('layer1') cls.layer2stage = TextureStage('layer2') cls.layer3stage = TextureStage('layer3') cls.layer4stage = TextureStage('layer4') cls.texture_sets = {} layernames = ["layer1", "layer2", "layer3", "layer4"] stages = [ cls.layer1stage, cls.layer2stage, cls.layer3stage, cls.layer4stage ] texture_files = os.listdir("texture/planet/layers/") for filename in texture_files: name, ext = os.path.splitext(filename) if name.endswith("layer1"): paths = [ "texture/planet/layers/" + filename.replace("layer1", layer) for layer in layernames ] if all(os.path.exists(path) for path in paths): setname = name.replace("layer1", "").strip("_") texture_set = [(cls.noisestage, cls.noisetex)] for stage, path in zip(stages, paths): tex = loader.loadTexture(path) tex.setWrapU(Texture.WMClamp) tex.setWrapV(Texture.WMClamp) texture_set.append((stage, tex)) cls.texture_sets[setname] = texture_set cls.ready = True def __init__(self, parent, planet, **kwargs): super(PlanetView, self).__init__(parent, planet, **kwargs) if not PlanetView.ready: PlanetView.setup(self.base.loader) self.node = NodePath(SphereNode(subdivides=4)) self.node.setShader(Shader.load("shader/planet.cg")) self.cloudtime = 0.0 self.seed = hash("fish") self.param_set = ParamSet(self.seed) self.compute_seed_param() for stage, tex in PlanetView.texture_sets['terrestrial_big']: self.node.setTexture(stage, tex) self.setup_shader_inputs() self.node.setScale(1 / self.node.getBounds().getRadius()) self.node.reparentTo(self.parent.node) def set_light(self, light): self.node.setShaderInput("light", light) self.node.setShaderInput("lightcolor", Vec4(light.getColor())) def compute_seed_param(self): rng = random.Random() rng.seed(self.seed) self.param_set.vectors["seed"] = Vec4(rng.random(), rng.random(), rng.random(), self.cloudtime) self.setup_shader_inputs() def setup_shader_inputs(self): for k, v in self.param_set.vectors.iteritems(): self.node.setShaderInput(k, v) self.node.setShaderInput("eye", self.base.camera) def tick(self, elapsed): self.cloudtime += elapsed * 0.02 self.compute_seed_param() self.setup_shader_inputs()
class PlanetView(View): ready = False @classmethod def setup(cls, loader): cls.noisetex = loader.load3DTexture("texture/noise/fbm_###.tif") cls.noisestage = TextureStage('noise') cls.layer1stage = TextureStage('layer1') cls.layer2stage = TextureStage('layer2') cls.layer3stage = TextureStage('layer3') cls.layer4stage = TextureStage('layer4') cls.texture_sets = {} layernames = ["layer1", "layer2", "layer3", "layer4"] stages = [cls.layer1stage, cls.layer2stage, cls.layer3stage, cls.layer4stage] texture_files = os.listdir("texture/planet/layers/") for filename in texture_files: name,ext = os.path.splitext(filename) if name.endswith( "layer1" ): paths = [ "texture/planet/layers/" + filename.replace("layer1",layer) for layer in layernames ] if all( os.path.exists( path ) for path in paths ): setname = name.replace("layer1","").strip("_") texture_set = [ (cls.noisestage,cls.noisetex) ] for stage,path in zip(stages,paths): tex = loader.loadTexture( path ) tex.setWrapU( Texture.WMClamp ) tex.setWrapV( Texture.WMClamp ) texture_set.append( (stage, tex) ) cls.texture_sets[setname] = texture_set cls.ready = True def __init__(self, parent, planet, **kwargs): super(PlanetView, self).__init__(parent, planet, **kwargs) if not PlanetView.ready: PlanetView.setup(self.base.loader) self.node = NodePath(SphereNode(subdivides=4)) self.node.setShader(Shader.load("shader/planet.cg")) self.cloudtime = 0.0 self.seed = hash("fish") self.param_set = ParamSet(self.seed) self.compute_seed_param() for stage, tex in PlanetView.texture_sets['terrestrial_big']: self.node.setTexture(stage, tex) self.setup_shader_inputs() self.node.setScale(1/self.node.getBounds().getRadius()) self.node.reparentTo(self.parent.node) def set_light(self, light): self.node.setShaderInput("light", light) self.node.setShaderInput("lightcolor", Vec4(light.getColor())) def compute_seed_param(self): rng = random.Random() rng.seed(self.seed) self.param_set.vectors["seed"] = Vec4(rng.random(), rng.random(), rng.random(), self.cloudtime) self.setup_shader_inputs() def setup_shader_inputs(self): for k, v in self.param_set.vectors.iteritems(): self.node.setShaderInput(k, v) self.node.setShaderInput("eye", self.base.camera) def tick(self, elapsed): self.cloudtime += elapsed * 0.02 self.compute_seed_param() self.setup_shader_inputs()
class StarView(View): ready = False @classmethod def setup(cls, loader): cls.noisetex = loader.load3DTexture("texture/noise/fbm_###.tif") cls.noisestage = TextureStage('noise') cls.layer1stage = TextureStage('layer1') cls.layer2stage = TextureStage('layer2') cls.layer3stage = TextureStage('layer3') cls.layer4stage = TextureStage('layer4') stages = [ cls.layer1stage, cls.layer2stage, cls.layer3stage, cls.layer4stage ] texture_files = os.listdir("texture/") paths = glob.glob("texture/star/layers/*.tif") paths.sort() cls.texture_set = [(cls.noisestage, cls.noisetex)] for stage, path in zip(stages, paths): tex = loader.loadTexture(path) tex.setWrapU(Texture.WMClamp) tex.setWrapV(Texture.WMClamp) cls.texture_set.append((stage, tex)) cls.ready = True def __init__(self, parent, star, **kwargs): super(StarView, self).__init__(parent, star, **kwargs) if not StarView.ready: StarView.setup(self.base.loader) self.seed = random.random() self.node = NodePath('star') plight = PointLight("starlight") self.light = self.node.attachNewNode(plight) self.light.setColor(self.obj.color) self.model = self.light.attachNewNode(SphereNode(subdivides=4)) self.model.setShader(Shader.load("shader/star.cg")) self.cloudtime = 0.0 #self.seed = hash("fish") self.param_set = ParamSet(self.seed) min_scale = Vec4(0.5, 0.5, 0.5, 0.5) max_scale = Vec4(1, 1, 1, 1) max_radius = StellarClass.highest_radius min_radius = StellarClass.lowest_radius radius_factor = log(self.obj.radius * (1 / min_radius), 100) / log( max_radius * (1 / min_radius), 100) self.param_set.vectors['scale'] = min_scale + ( max_scale - min_scale) * radius_factor self.compute_seed_param() for stage, tex in StarView.texture_set: self.model.setTexture(stage, tex) self.speed = 0.00000001 self.setup_shader_inputs() self.node.setScale(1 / self.node.getBounds().getRadius()) self.node.reparentTo(self.parent.node) def compute_seed_param(self): rng = random.Random() rng.seed(self.seed) self.param_set.vectors["seed"] = Vec4(rng.random(), rng.random(), rng.random(), self.cloudtime) self.setup_shader_inputs() def setup_shader_inputs(self): for k, v in self.param_set.vectors.iteritems(): self.model.setShaderInput(k, v) self.model.setShaderInput("starcolor", self.obj.color) self.model.setShaderInput("eye", self.base.camera) def tick(self, elapsed): self.cloudtime += elapsed * 0.05 self.compute_seed_param() self.setup_shader_inputs()
class StarView(View): ready = False @classmethod def setup(cls, loader): cls.noisetex = loader.load3DTexture("texture/noise/fbm_###.tif") cls.noisestage = TextureStage('noise') cls.layer1stage = TextureStage('layer1') cls.layer2stage = TextureStage('layer2') cls.layer3stage = TextureStage('layer3') cls.layer4stage = TextureStage('layer4') stages = [cls.layer1stage, cls.layer2stage, cls.layer3stage, cls.layer4stage] texture_files = os.listdir("texture/") paths = glob.glob("texture/star/layers/*.tif") paths.sort() cls.texture_set = [ (cls.noisestage,cls.noisetex) ] for stage,path in zip(stages,paths): tex = loader.loadTexture( path ) tex.setWrapU( Texture.WMClamp ) tex.setWrapV( Texture.WMClamp ) cls.texture_set.append( (stage, tex) ) cls.ready = True def __init__(self, parent, star, **kwargs): super(StarView, self).__init__(parent, star, **kwargs) if not StarView.ready: StarView.setup(self.base.loader) self.seed = random.random() self.node = NodePath('star') plight = PointLight("starlight") self.light = self.node.attachNewNode(plight) self.light.setColor(self.obj.color) self.model = self.light.attachNewNode(SphereNode(subdivides=4)) self.model.setShader(Shader.load("shader/star.cg")) self.cloudtime = 0.0 #self.seed = hash("fish") self.param_set = ParamSet(self.seed) min_scale = Vec4(0.5, 0.5, 0.5, 0.5) max_scale = Vec4(1, 1, 1, 1) max_radius = StellarClass.highest_radius min_radius = StellarClass.lowest_radius radius_factor = log(self.obj.radius*(1/min_radius), 100) / log(max_radius*(1/min_radius), 100) self.param_set.vectors['scale'] = min_scale + (max_scale-min_scale)*radius_factor self.compute_seed_param() for stage, tex in StarView.texture_set: self.model.setTexture(stage, tex) self.speed = 0.00000001 self.setup_shader_inputs() self.node.setScale(1/self.node.getBounds().getRadius()) self.node.reparentTo(self.parent.node) def compute_seed_param(self): rng = random.Random() rng.seed(self.seed) self.param_set.vectors["seed"] = Vec4(rng.random(), rng.random(), rng.random(), self.cloudtime) self.setup_shader_inputs() def setup_shader_inputs(self): for k, v in self.param_set.vectors.iteritems(): self.model.setShaderInput(k, v) self.model.setShaderInput("starcolor", self.obj.color) self.model.setShaderInput("eye", self.base.camera) def tick(self, elapsed): self.cloudtime += elapsed * 0.05 self.compute_seed_param() self.setup_shader_inputs()