Changeset 419 for trunk/src/gfx


Ignore:
Timestamp:
07/14/15 20:19:52 (10 years ago)
Author:
epyon
Message:
  • animation - key_channel_set simplified to data_channel_set
  • animation - raw_channel_interpolator
Location:
trunk/src/gfx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gfx/keyframed_mesh.cc

    r417 r419  
    3939        m_frame_count  = pos_size / m_vertex_count;
    4040        m_pbuffer      = buffer();
     41
     42        if ( m_tag_map && m_tag_map->get_count() > 0 )
     43        {
     44                m_interpolation_key = m_tag_map->get_node( 0 )->data->get_interpolation_key();
     45        }
    4146}
    4247
     
    5055        if ( !m_tag_map ) return transform();
    5156        NV_ASSERT( node_id < m_tag_map->get_count(), "TAGMAP FAIL" );
    52         const key_channel_set* data = m_tag_map->get_node( node_id )->data;
     57        const data_channel_set* data = m_tag_map->get_node( node_id )->data;
    5358        NV_ASSERT( data, "TAG FAIL" );
    54         transform last = data->get_raw_transform( m_last_frame );
    55         transform next = data->get_raw_transform( m_next_frame );
    56         return interpolate( last, next, m_interpolation  );
     59        raw_channel_interpolator interpolator( data, m_interpolation_key );
     60        return interpolator.get< transform >( m_last_frame, m_next_frame, m_interpolation );
    5761}
    5862
  • trunk/src/gfx/mesh_creator.cc

    r418 r419  
    1919        {
    2020                sint16 parent_id = m_data->m_nodes[i].parent_id;
    21                 key_channel_set* keys   = m_data->m_nodes[i].data;
    22                 key_channel_set* pkeys  = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr );
     21                data_channel_set* keys   = m_data->m_nodes[i].data;
     22                data_channel_set* pkeys  = ( parent_id != -1 ? m_data->m_nodes[parent_id].data : nullptr );
    2323                size_t count     = ( keys ? keys->get_channel_size(0) : 0 );
    2424                size_t pcount    = ( pkeys ? pkeys->get_channel_size(0) : 0 );
     
    4646}
    4747
    48 // TODO: DELETE
    49 struct assimp_key_p  { float time; nv::vec3 position; };
    50 struct assimp_key_r  { float time; nv::quat rotation; };
    51 
    5248
    5349void nv::mesh_nodes_creator::merge_keys()
     
    5551        for ( size_t i = 0; i < m_data->get_count(); ++i )
    5652        {
    57                 key_channel_set* old_keys = m_data->m_nodes[i].data;
     53                data_channel_set* old_keys = m_data->m_nodes[i].data;
    5854                if ( old_keys && old_keys->size() > 0 )
    5955                {
     
    6965                        }
    7066
    71                         key_channel_set* new_keys = key_channel_set_creator::create( 1 );
    72                         key_channel_set_creator nk_access( new_keys );
     67                        data_channel_set* new_keys = data_channel_set_creator::create( 1 );
     68                        data_channel_set_creator nk_access( new_keys );
    7369                        data_channel_access< nv_key_transform > kt_channel( nk_access.add_channel<nv_key_transform>( max_keys ) );
    7470
    75                         data_descriptor final_key = old_keys->get_final_key();
     71                        raw_channel_interpolator interpolator( old_keys );
     72                        data_descriptor final_key = interpolator.get_interpolation_key();
    7673
    7774                        for ( unsigned n = 0; n < max_keys; ++n )
     
    8380                                {
    8481                                        size_t idx = nv::min( old_keys->get_channel_size(c) - 1, n );
    85                                         pkey += old_keys->get_raw( *old_keys->get_channel(c), idx, pkey );
    86                                 }
    87                                 kt_channel.data()[n].tform = extract_transform_raw( final_key, key );
     82                                        pkey += raw_channel_interpolator::get_raw( *old_keys->get_channel(c), idx, pkey );
     83                                }
     84                                kt_channel.data()[n].tform = extract_key_raw< nv::transform >( final_key, key );
    8885                        }
    8986
     
    106103                if ( node.data )
    107104                {
    108                         key_channel_set* kdata  = node.data;
     105                        data_channel_set* kdata  = node.data;
    109106                        for ( size_t c = 0; c < kdata->size(); ++c )
    110107                        {
     
    332329                }
    333330        }
    334         delete tangents2;
     331        delete[] tangents2;
    335332
    336333        data_channel_set_creator( m_data ).set_channel( n_channel_index, merge_channels( *n_channel, g_channel ) );
  • trunk/src/gfx/skeletal_mesh.cc

    r418 r419  
    9191
    9292
     93void nv::skeletal_animation_entry_cpu::initialize()
     94{
     95        for ( size_t i = 0; i < m_node_data->get_count(); ++i )
     96        {
     97                if ( m_node_data->get_node( i )->data )
     98                {
     99                        m_interpolation_key = m_node_data->get_node( i )->data->get_interpolation_key();
     100                        break;
     101                }
     102        }
     103}
     104
    93105void nv::skeletal_animation_entry_cpu::update_skeleton( transform* skeleton, float time ) const
    94106{
     
    100112        for ( size_t i = 0; i < m_node_data->get_count(); ++i )
    101113        {
    102                 skeleton[i] = m_node_data->get_node(i)->data->get_transform( frame_num );
     114                raw_channel_interpolator interpolator( m_node_data->get_node( i )->data, m_interpolation_key );
     115                skeleton[i] = interpolator.get< transform >( frame_num );
    103116        }
    104117}
     
    112125        m_bone_ids  = new sint16[ node_count ];
    113126
     127        NV_ASSERT( m_node_data, "node data empty!" );
     128
    114129        if ( !m_node_data->is_flat() )
    115130        {
     
    146161                        if ( node->data )
    147162                        {
    148                                 node_mat = node->data->get_matrix( anim_time );
     163                                raw_channel_interpolator interpolator( node->data, m_interpolation_key );
     164                                node_mat = interpolator.get< mat4 >( anim_time );
    149165                        }
    150166
     
    177193                }
    178194                m_bone_ids[n] = bone_id;
     195
     196                if ( m_interpolation_key.size() == 0 && node->data )
     197                        m_interpolation_key = node->data->get_interpolation_key();
     198
    179199        }
    180200        m_prepared = true;
     
    190210        if ( node->data )
    191211        {
    192                 node_mat = node->data->get_matrix( time );
     212                raw_channel_interpolator interpolator( node->data, m_interpolation_key );
     213                node_mat = interpolator.get< mat4 >( time );
    193214        }
    194215
Note: See TracChangeset for help on using the changeset viewer.