Source code for pi3d.shape.MultiSprite

from pi3d.Texture import Texture
from pi3d.Buffer import Buffer
from pi3d.Shape import Shape
import logging

LOGGER = logging.getLogger(__name__)

[docs]class MultiSprite(Shape): """ 3d model inherits from Shape, this is a series of Sprites edge to edge to allow larger images than the maximum size of 1920 imposed by the Texture class """ def __init__(self, textures, shader, camera=None, light=None, w=1.0, h=1.0, name="", x=0.0, y=0.0, z=20.0, rx=0.0, ry=0.0, rz=0.0, sx=1.0, sy=1.0, sz=1.0, cx=0.0, cy=0.0, cz=0.0): """Uses standard constructor for Shape. Arguments: *textures* must be a two dimensional list of lists of textures or strings (which must be the path/names of image files) The array runs left to right then down so six textures in spreadsheet notation would be [[R1C1, R1C2], [R2C1, R2C2], [R3C1, R3C2]] *shader* shader to use Extra keyword arguments: *w* Width. *h* Height. """ try: nh = len(textures) nw = len(textures[0]) super(MultiSprite, self).__init__(camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz) self.width = w self.height = h ww = w / 2.0 / nw hh = h / 2.0 / nh self.buf = [] for i in range(nw): for j in range(nh): offw = w * ((1.0 - nw) / 2.0 + i) / nw offh = -h * ((1.0 - nh) / 2.0 + j) / nh verts = ((-ww + offw, hh + offh, 0.0), (ww + offw, hh + offh, 0.0), (ww + offw, -hh + offh, 0.0), (-ww + offw, -hh + offh, 0.0)) norms = ((0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1)) texcoords = ((0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0 , 1.0)) inds = ((0, 1, 3), (1, 2, 3)) thisbuf = Buffer(self, verts, texcoords, inds, norms) if not isinstance(textures[j][i], Texture): # i.e. can load from file name textures[j][i] = Texture(textures[j][i]) thisbuf.textures = [textures[j][i]] self.buf.append(thisbuf) self.set_shader(shader) self.set_2d_size() # method in Shape, default full window size except IndexError: LOGGER.error('Must supply a list of lists of Textures or strings')