def parse_main(s):
    p = 0
    block_id, p = u(I, s, p)
    block_size, p = u(I, s, p)
    wallmarks_count, p = u(I, s, p)

    for i in range(wallmarks_count):
        set_count, p = u(I, s, p)
        shader, p = utils.parse_string_nul(s, p)
        texture, p = utils.parse_string_nul(s, p)
        for i in range(set_count):
            bounds, p = u(f * 4, s, p)
            vertex_count, p = u(I, s, p)
            vertices = []
            uvs = []
            for i in range(vertex_count):
                vertex, p = u(f * 3 + I + f * 2, s, p)
                vertices.append((vertex[0], vertex[2], vertex[1]))
                uvs.append((vertex[4], 1 - vertex[5]))
            # generate faces
            triangles = []
            index = 0
            for i in range(vertex_count // 3):
                triangles.append((index, index + 2, index + 1))
                index += 3
            import_utils.crete_mesh(vertices, triangles, None, None, uvs,
                                    texture)
示例#2
0
def parse_mesh(data, mesh_id):
    position = 0
    shader, position = utils.parse_string_nul(data, position)
    texture, position = utils.parse_string_nul(data, position)
    mesh_info, position = u('IffII', data, position)
    flags, min_scale, max_scale, vertices_count, indices_count = mesh_info
    vertices = []
    uvs = []

    for vertex_id in range(vertices_count):
        vertex_data, position = u('5f', data, position)
        position_x, position_y, position_z, uv_x, uv_y = vertex_data
        vertices.append((position_x, position_z, position_y))
        uvs.append((uv_x, 1 - uv_y))

    triangles = []

    for index_id in range(indices_count // 3):
        triangle_data, position = u('3H', data, position)
        index_1, index_2, index_3 = triangle_data
        triangles.append((index_1, index_3, index_2))

    import_utils.crete_mesh(vertices,
                            triangles,
                            uvs=uvs,
                            image='details\\build_details')
示例#3
0
def details_data_parse(details_data):
    position = 0

    while position < len(details_data):
        position, block_id, block_size = utils.read_block(
            position, details_data)

        if block_id == 0x0:
            slots_coords = parse_header(
                details_data[position:position + block_size], coord_y)
            position += block_size
            import_utils.crete_mesh(slots_coords)
        elif block_id == 0x1:
            parse_meshes(details_data[position:position + block_size])
            position += block_size
        elif block_id == 0x2:
            coord_y = parse_slots(details_data[position:position + block_size])
            position += block_size
        else:
            print(' ! UNKNOW BLOCK ({0}) {1} BYTES'.format(
                hex(block_id), block_size))
            position += block_size
import bpy, utils, parse_cform, import_utils, time
from utils import unpack_data as u

start_time = time.time()
data = utils.read_bin_file('level', 'cform', 'c:\\')
verts, faces, material_indices, materials = parse_cform.parse_cform(data)
import_utils.crete_mesh(verts, faces, materials, material_indices)
finish_time = time.time()
print('total time: {:.5}s'.format(finish_time-start_time))
示例#5
0
import time, utils, import_utils, dm_parse

start_time = time.time()

dm_file_path = 'c:\\'
dm_file_name = 'rain'
dm_file_ext = 'dm'
dm_data = utils.read_bin_file(dm_file_name, dm_file_ext, dm_file_path)
vertices, uvs, triangles, texture_name = dm_parse.parse_main(dm_data)
import_utils.crete_mesh(vertices, triangles, uvs=uvs, image=texture_name)

finish_time = time.time()
print('total time: {}s'.format(finish_time - start_time))
import utils, import_utils