def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == """ self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs rendering with a different Shader/Texture. self.draw() relies on objects inheriting from this filling buf with at least one element. """ self.children = [] self._camera = camera self.__init_matrices()
def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == Shape holds matrices that are updated each time it is moved or rotated this saves time recalculating them each frame as the Shape is drawn """ self.tr1 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[0] - self.unif[9], self.unif[1] - self.unif[10], self.unif[2] - self.unif[11], 1.0]]) """translate to position - offset""" s, c = sin(radians(self.unif[3])), cos(radians(self.unif[3])) self.rox = array([[1.0, 0.0, 0.0, 0.0], [0.0, c, s, 0.0], [0.0, -s, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about x axis""" s, c = sin(radians(self.unif[4])), cos(radians(self.unif[4])) self.roy = array([[c, 0.0, -s, 0.0], [0.0, 1.0, 0.0, 0.0], [s, 0.0, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about y axis""" s, c = sin(radians(self.unif[5])), cos(radians(self.unif[5])) self.roz = array([[c, s, 0.0, 0.0], [-s, c, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about z axis""" self.scl = array([[self.unif[6], 0.0, 0.0, 0.0], [0.0, self.unif[7], 0.0, 0.0], [0.0, 0.0, self.unif[8], 0.0], [0.0, 0.0, 0.0, 1.0]]) """scale""" self.tr2 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[9], self.unif[10], self.unif[11], 1.0]]) """translate to offset""" self.MFlg = True self.M = (ctypes.c_float * 32)(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) self._camera = camera self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs
def __init__(self, camera, light, name, x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz): """ Arguments: *light* Light instance: if None then Light.instance() will be used. *name* Name string for identification. *x, y, z* Location of the origin of the shape, stored in a uniform array. *rx, ry, rz* Rotation of shape in degrees about each axis. *sx, sy, sz* Scale in each direction. *cx, cy, cz* Offset vertices from origin in each direction. """ super(Shape, self).__init__() self.name = name light = light or Light.instance() # uniform variables all in one array (for Shape and one for Buffer) self.unif = (ctypes.c_float * 60)( x, y, z, rx, ry, rz, sx, sy, sz, cx, cy, cz, 0.5, 0.5, 0.5, 5000.0, 0.8, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, light.lightpos[0], light.lightpos[1], light.lightpos[2], light.lightcol[0], light.lightcol[1], light.lightcol[2], light.lightamb[0], light.lightamb[1], light.lightamb[2]) """ pass to shader array of vec3 uniform variables: ===== ========================================== ==== == vec3 description python ----- ------------------------------------------ ------- index from to ===== ========================================== ==== == 0 location 0 2 1 rotation 3 5 2 scale 6 8 3 offset 9 11 4 fog shade 12 14 5 fog distance, fog alpha, shape alpha 15 17 6 camera position 18 20 7 unused: custom data space 21 23 8 light0 position, direction vector 24 26 9 light0 strength per shade 27 29 10 light0 ambient values 30 32 11 light1 position, direction vector 33 35 12 light1 strength per shade 36 38 13 light1 ambient values 39 41 14 defocus dist, amount (only 2 used) 42 43 15 defocus frame width, height (only 2 used) 45 46 16 custom data space 48 50 17 custom data space 51 53 18 custom data space 54 56 19 custom data space 57 59 ===== ========================================== ==== == Shape holds matrices that are updated each time it is moved or rotated this saves time recalculating them each frame as the Shape is drawn """ self.tr1 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [ self.unif[0] - self.unif[9], self.unif[1] - self.unif[10], self.unif[2] - self.unif[11], 1.0 ]]) """translate to position - offset""" s, c = sin(radians(self.unif[3])), cos(radians(self.unif[3])) self.rox = array([[1.0, 0.0, 0.0, 0.0], [0.0, c, s, 0.0], [0.0, -s, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about x axis""" s, c = sin(radians(self.unif[4])), cos(radians(self.unif[4])) self.roy = array([[c, 0.0, -s, 0.0], [0.0, 1.0, 0.0, 0.0], [s, 0.0, c, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about y axis""" s, c = sin(radians(self.unif[5])), cos(radians(self.unif[5])) self.roz = array([[c, s, 0.0, 0.0], [-s, c, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]) """rotate about z axis""" self.scl = array([[self.unif[6], 0.0, 0.0, 0.0], [0.0, self.unif[7], 0.0, 0.0], [0.0, 0.0, self.unif[8], 0.0], [0.0, 0.0, 0.0, 1.0]]) """scale""" self.tr2 = array([[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [self.unif[9], self.unif[10], self.unif[11], 1.0]]) """translate to offset""" self.MFlg = True self.M = (ctypes.c_float * 32)(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) self._camera = camera self.shader = None self.textures = [] self.buf = [] """self.buf contains a buffer for each part of this shape that needs