Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    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
Beispiel #5
0
    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