def __init__(self, id, params, shadingtype, bumpmap = None, double_sided = False, emission = (0.0, 0.0, 0.0, 1.0), ambient = (0.0, 0.0, 0.0, 1.0), diffuse = (0.0, 0.0, 0.0, 1.0), specular = (0.0, 0.0, 0.0, 1.0), shininess = 0.0, reflective = (0.0, 0.0, 0.0, 1.0), reflectivity = 0.0, transparent = (0.0, 0.0, 0.0, 1.0), transparency = 0.0, index_of_refraction = None, xmlnode = None): """Create an effect instance out of properties. :param str id: A string identifier for the effect :param list params: A list containing elements of type :class:`collada.material.Sampler2D` and :class:`collada.material.Surface` :param str shadingtype: The type of shader to be used for this effect. Right now, we only supper the shaders listed in :attr:`shaders` :param `collada.material.Map` bumpmap: The bump map for this effect, or None if there isn't one :param bool double_sided: Whether or not the material should be rendered double sided :param emission: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param ambient: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param diffuse: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param specular: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param shininess: Either a single float or an instance of :class:`collada.material.Map` :param reflective: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param reflectivity: Either a single float or an instance of :class:`collada.material.Map` :param tuple transparent: Either an RGBA-format tuple of four floats or an instance of :class:`collada.material.Map` :param transparency: Either a single float or an instance of :class:`collada.material.Map` :param float index_of_refraction: A single float indicating the index of refraction for perfectly refracted light :param xmlnode: If loaded from xml, the xml node """ self.id = id """The string identifier for the effect""" self.params = params """A list containing elements of type :class:`collada.material.Sampler2D` and :class:`collada.material.Surface`""" self.shadingtype = shadingtype """String with the type of the shading.""" self.bumpmap = bumpmap """Either the bump map of the effect of type :class:`collada.material.Map` or None if there is none.""" self.double_sided = double_sided """A boolean indicating whether or not the material should be rendered double sided""" self.emission = emission """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.ambient = ambient """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.diffuse = diffuse """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.specular = specular """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.shininess = shininess """Either a single float or an instance of :class:`collada.material.Map`""" self.reflective = reflective """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.reflectivity = reflectivity """Either a single float or an instance of :class:`collada.material.Map`""" self.transparent = transparent """Either an RGB-format tuple of three floats or an instance of :class:`collada.material.Map`""" self.transparency = transparency """Either a single float or an instance of :class:`collada.material.Map`""" self.index_of_refraction = index_of_refraction """A single float indicating the index of refraction for perfectly refracted light""" self._fixColorValues() if xmlnode is not None: self.xmlnode = xmlnode """ElementTree representation of the effect""" else: shadnode = E(self.shadingtype) for prop in self.supported: value = getattr(self, prop) if value is None: continue propnode = E(prop) shadnode.append( propnode ) if type(value) is Map: propnode.append(value.xmlnode) elif type(value) is float: propnode.append(E.float(str(value))) else: propnode.append(E.color(' '.join(map(str, value) ))) effect_nodes = [param.xmlnode for param in self.params] effect_nodes.append(E.technique(shadnode, sid='common')) self.xmlnode = E.effect( E.profile_COMMON(*effect_nodes) , id=self.id, name=self.id)