def _get_domain(self, indexed, mode, group, formats): if group is None: group = null_group # Batch group if group not in self.group_map: self._add_group(group) domain_map = self.group_map[group] # Find domain given formats, indices and mode key = (formats, mode, indexed) try: domain = domain_map[key] except KeyError: # Create domain if indexed: domain = vertexdomain.create_indexed_domain(*formats) else: domain = vertexdomain.create_domain(*formats) domain.__formats = formats domain_map[key] = domain self._draw_list_dirty = True return domain
def _get_domain(self, indexed, mode, group, formats): if group is None: group = get_default_group() # Batch group if group not in self.group_map: self._add_group(group) # If not a ShaderGroup, use the default ShaderProgram shader_program = getattr(group, 'program', get_default_shader()) # Find domain given formats, indices and mode domain_map = self.group_map[group] key = (formats, mode, indexed, shader_program.id) try: domain = domain_map[key] except KeyError: # Create domain if indexed: domain = vertexdomain.create_indexed_domain( shader_program.id, *formats) else: domain = vertexdomain.create_domain(shader_program.id, *formats) domain.__formats = formats domain_map[key] = domain self._draw_list_dirty = True return domain
def __init__(self, radius, inner_radius, slices, inner_slices): # Create the vertex and normal arrays. vertices = [] normals = [] u_step = 2 * pi / (slices - 1) v_step = 2 * pi / (inner_slices - 1) u = 0. for i in range(slices): cos_u = cos(u) sin_u = sin(u) v = 0. for j in range(inner_slices): cos_v = cos(v) sin_v = sin(v) d = (radius + inner_radius * cos_v) x = d * cos_u y = d * sin_u z = inner_radius * sin_v nx = cos_u * cos_v ny = sin_u * cos_v nz = sin_v vertices.extend([x, y, z]) normals.extend([nx, ny, nz]) v += v_step u += u_step # Create a list of triangle indices. indices = [] for i in range(slices - 1): for j in range(inner_slices - 1): p = i * inner_slices + j indices.extend([p, p + inner_slices, p + inner_slices + 1]) indices.extend([p, p + 1, p + inner_slices + 1]) self.domain = vertexdomain.create_indexed_domain('v3f/static', 'n3f/static') primitive = self.domain.create(len(vertices)//3, len(indices)) primitive.vertices = vertices primitive.normals = normals primitive.indices = indices
def __init__(self, radius, inner_radius, slices, inner_slices): # Create the vertex and normal arrays. vertices = list() normals = list() u_step = 2 * pi / (slices - 1) v_step = 2 * pi / (inner_slices - 1) u = 0. for i in range(slices): cos_u = cos(u) sin_u = sin(u) v = 0. for j in range(inner_slices): cos_v = cos(v) sin_v = sin(v) d = (radius + inner_radius * cos_v) x = d * cos_u y = d * sin_u z = inner_radius * sin_v nx = cos_u * cos_v ny = sin_u * cos_v nz = sin_v vertices.extend([x, y, z]) normals.extend([nx, ny, nz]) v += v_step u += u_step # Create a list of triangle indices. indices = list() for i in range(slices - 1): for j in range(inner_slices - 1): p = i * inner_slices + j indices.extend([p, p + inner_slices, p + inner_slices + 1]) indices.extend([p, p + 1, p + inner_slices + 1]) self.domain = vertexdomain.create_indexed_domain('v3f/static', 'n3f/static') primitive = self.domain.create(len(vertices) // 3, len(indices)) primitive.vertices = vertices primitive.normals = normals primitive.indices = indices