void get_a_bulk(bulk *b) { int i; get_face_num(&b->F); for(i=0;i<b->F;i++) get_a_face(&b->f[i]); }
void mmdpiPmdAnalyze::load_texture( void ) { // テクスチャ dword fver_num_base = 0; long ppid = -1; dword pi = 0; // 一時的に読み込み texture = new MMDPI_IMAGE[ get_material_num() ]; toon_texture = new MMDPI_IMAGE[ get_material_num() ]; for( dword j = 0; j < get_face_num(); j ++ ) { MMDPI_BLOCK_FACE_PTR f = &get_face_block()[ j ]; for( dword i = 0; i < f->material_num; i ++ ) { MMDPI_MATERIAL_PTR m = f->material[ i ]; MMDPI_PMD_MATERIAL_PTR mpmx = &material[ m->pid ]; char* texture_file_name; texture_file_name = mpmx->texture_file_name; char texture_file_name_full[ 0xffff ]; int j, k; for( k = 0; directory[ k ]; k ++ ) texture_file_name_full[ k ] = directory[ k ]; for( j = 0; texture_file_name[ j ] && texture_file_name[ j ] != '*'; j ++, k ++ ) texture_file_name_full[ k ] = texture_file_name[ j ]; texture_file_name_full[ k ] = '\0'; // テクスチャの関連付け m->texture.load( texture_file_name_full ); //m->toon_texture.copy( toon_texture00[ mpmx->toon_texture_number ] ); } } }
// PMD解析 int mmdpiPmdAnalyze::analyze( void ) { adjust_material = new MMDPI_MATERIAL[ material_num ]; for( dword i = 0; i < material_num; i ++ ) adjust_material[ i ].face_num = material[ i ].face_vert_count; adjust_vertex = new MMDPI_BLOCK_VERTEX(); adjust_vertex->alloc( mmdpiPmdLoad::vertex_num ); for( dword i = 0; i < mmdpiPmdLoad::vertex_num; i ++ ) { MMDPI_PMD_VERTEX_PTR ver = &vertex[ i ]; adjust_vertex->ver[ i ].x = ver->pos[ 0 ]; adjust_vertex->ver[ i ].y = ver->pos[ 1 ]; adjust_vertex->ver[ i ].z = ver->pos[ 2 ]; adjust_vertex->uv[ i ].x = ver->uv[ 0 ]; adjust_vertex->uv[ i ].y = 1 - ver->uv[ 1 ]; adjust_vertex->uv[ i ].z = 0; adjust_vertex->uv[ i ].w = 0; adjust_vertex->nor[ i ].x = ver->nor[ 0 ]; adjust_vertex->nor[ i ].y = ver->nor[ 1 ]; adjust_vertex->nor[ i ].z = ver->nor[ 2 ]; // ボーン adjust_vertex->index[ i ].x = ( float )ver->bone_num[ 0 ]; adjust_vertex->index[ i ].y = ( float )ver->bone_num[ 1 ]; adjust_vertex->index[ i ].z = ( float )0; adjust_vertex->index[ i ].w = ( float )0; // 重み adjust_vertex->weight[ i ].x = ver->bone_weight / 100.0f; adjust_vertex->weight[ i ].y = 1.0f - adjust_vertex->weight[ i ].x; adjust_vertex->weight[ i ].z = 0; adjust_vertex->weight[ i ].w = 0; } // 最適化 mmdpiAdjust::adjust_material_bone( material_num, adjust_material, mmdpiPmdLoad::bone_num, face, adjust_vertex ); mmdpiAdjust::adjust_polygon( face, face_num, adjust_vertex, mmdpiPmdLoad::vertex_num ); mmdpiAdjust::adjust_face( face, face_num, mmdpiPmdLoad::vertex_num ); mmdpiAdjust::adjust_bone(); // テクスチャ load_texture(); //skin = new MMDPI_SKIN_INFO[ skin_num ]; //for( uint i = 0; i < skin_num; i ++ ) //{ // a_skin[ i ].skin_flag = 0; // a_skin[ i ].skin_name = skin[ i ].skin_name; //} // マテリアル情報の保存 for( dword j = 0; j < get_face_num(); j ++ ) { MMDPI_BLOCK_FACE_PTR f = &get_face_block()[ j ]; for( dword i = 0; i < f->material_num; i ++ ) { MMDPI_MATERIAL_PTR m = f->material[ i ]; MMDPI_PMD_MATERIAL_PTR mpmx = &material[ m->pid ]; m->edge_size = mpmx->edge_flag * 0.02f; m->edge_color.r = 0; m->edge_color.g = 0; m->edge_color.b = 0; m->edge_color.a = 1; m->opacity = mpmx->alpha; } } return 0; }