Ignore:
Timestamp:
07/23/14 15:24:03 (11 years ago)
Author:
epyon
Message:
  • mesh_data_pack's in every format
  • md5_mesh_data removed, uses standard mesh_data
  • BONE_ARRAY in NMD is now a simple set of animation nodes
  • bone and animation node concepts merged
  • several minor changes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/gfx/animation.hh

    r286 r287  
    7373
    7474                        uint32 slot = 0;
    75                         int index    = -1;
     75                        int index0  = -1;
     76                        int index1  = -1;
    7677                        float factor = 1.0f;
    7778                        if ( desc.slots[0].vslot == animation_slot::TIME )
    7879                        {
     80                                NV_ASSERT( desc.slots[0].offset == 0, "time offset not zero!" );
    7981                                slot++;
    8082                                keyfresult--;
     
    8486                                        return keyfresult;
    8587                                }
    86                                 uint32 toffset = desc.slots[0].offset / 4;
    87                                 for ( int i = 0 ; i < (int)count - 1 ; i++ )
     88                                for ( int i = 1 ; i < (int)count ; i++ )
    8889                                {
    89                                         if ( time < fdata[ i * keyfsize + keyfsize + toffset ] ) { index = i; break; }
     90                                        if ( time < fdata[ i * keyfsize ] ) { index0 = i - 1; break; }
    9091                                }
    91                                 NV_ASSERT( index >= 0, "animation time fail!");
    92                                 float time0  = fdata[ index * keyfsize + toffset ];
    93                                 float time1  = fdata[ index * keyfsize + keyfsize + toffset ];
     92                                NV_ASSERT( index0 >= 0, "animation time fail!");
     93                                index1 = index0 + 1;
     94                                float time0  = fdata[ index0 * keyfsize ];
     95                                float time1  = fdata[ index1 * keyfsize ];
    9496                                float delta  = time1 - time0;
    9597                                factor = glm::clamp( (time - time0) / delta, 0.0f, 1.0f );
     
    102104                                        return keyfresult;
    103105                                }
    104                                 index  = glm::clamp<int>( int( time ), 0, count - 2 );
    105                                 factor = glm::clamp<float> ( time - index, 0.0f, 1.0f );
     106                                index0 = glm::clamp<int>( int( time ), 0, count - 2 );
     107                                index1 = index0 + 1;
     108                                factor = glm::clamp<float> ( time - index0, 0.0f, 1.0f );
    106109                        }
    107110                        uint32 ret = 0;
     
    110113                                ret += nv::interpolate_raw(
    111114                                        desc.slots[slot], factor,
    112                                         fdata + index * keyfsize + desc.slots[slot].offset / 4,
    113                                         fdata + index * keyfsize + keyfsize + desc.slots[slot].offset / 4,
     115                                        fdata + index0 * keyfsize + desc.slots[slot].offset / 4,
     116                                        fdata + index1 * keyfsize + desc.slots[slot].offset / 4,
    114117                                        result + ret );
    115118                        }
Note: See TracChangeset for help on using the changeset viewer.