Ejemplo n.º 1
0
    def findMatName(self):
        if len(self.uvLayerNames) == 0:
            return

        #
        # search for matching Irrlicht material name
        #
        for lname in self.uvLayerNames:
            if iMaterials.getIrrMaterial(lname) != None:
                self.uvMatName = lname
                return

        #
        # if not found look for custom name: '$' prefix
        #
        for lname in self.uvLayerNames:
            if lname[0] == '$':
                self.uvMatName = lname
                return
Ejemplo n.º 2
0
    def writeBillboardNodeData(self,file,bObject,bbImage,level):

        if bObject.getType() != 'Mesh':
            return

        bMaterial = None
        mesh = bObject.getData(False, True)
        if len(mesh.materials) > 0:
            bMaterial = mesh.materials[0]
        
        material = iMaterials.DefaultMaterial(bObject,'billboard',
                self.exporter,bMaterial)
        i1 = iUtils.getIndent(level,3)
        i2 = iUtils.getIndent(level,6)

        localSpace = bObject.getMatrix('localspace')

        ipos = iUtils.b2iPosition(localSpace, bObject)
    
        spos = '%.6f, %.6f, %.6f' % (ipos.x, ipos.y, ipos.z)
        srot = '%.6f, %.6f, %.6f' % (0.0, 0.0, 0.0)
        sscale = '%.6f, %.6f, %.6f' % (1.0, 1.0, 1.0)

        self.writeSTDAttributes(file,i1,i2,bObject,spos,srot,sscale,'false')

        # billboard quad vertex positions: ul:3, ur:0, lr:1, ll:2
        
        ul = mesh.verts[3].co
        ur = mesh.verts[0].co
        lr = mesh.verts[1].co

        scale = bObject.getSize()
        dx = (ul.x - ur.x) * scale[0]
        dy = (ul.y - ur.y) * scale[1]
        dz = (ul.z - ur.z) * scale[2]
        width = math.fabs(math.sqrt((dx * dx) + (dy * dy) + (dz * dz)))

        dx = (ur.x - lr.x) * scale[0]
        dy = (ur.y - lr.y) * scale[1]
        dz = (ur.z - lr.z) * scale[2]
        height = math.fabs(math.sqrt((dx * dx) + (dy * dy) + (dz * dz)))

        file.write(i2 + '<int name="Width" value="%.6f" />\n' % width)
        file.write(i2 + '<int name="Height" value="%.6f" />\n' % height)
        file.write(i2 + '<color name="Shade_Top" value="ffffffff" />\n')
        file.write(i2 + '<color name="Shade_Down" value="ffffffff" />\n')

        file.write(i1 + '</attributes>\n')
        file.write(i1 + '<materials>\n')

        # extract material type based on irrb UV layer rules
        bMesh = bObject.getData(False,True)
        uvLayerNames = bMesh.getUVLayerNames()
        irrMatInfo = None
        for name in uvLayerNames:
            irrMatInfo = iMaterials.getIrrMaterial(name)
            if irrMatInfo != None:
                break
        if irrMatInfo == None:
            irrMatInfo = ('solid',1)

        self._writeSBImageAttributes(file, i2, material, irrMatInfo[0], bbImage,
                bObject)

        file.write(i1 + '</materials>\n')