Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKévin Dietrich <kevin.dietrich@mailoo.org>2016-09-20 15:15:02 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2016-09-20 15:17:05 +0300
commitf3b94a54bc9dc2c93c350e67f4cf1bb048d32afa (patch)
tree8d5f69006a233563408036c8743f149bf5ffa7a1 /source/blender/alembic/intern/abc_mesh.cc
parent386da0cc77cbd16a8b5a196dd1b44e517198dbda (diff)
Alembic: add support to interpolate transform matrices in-between
frames.
Diffstat (limited to 'source/blender/alembic/intern/abc_mesh.cc')
-rw-r--r--source/blender/alembic/intern/abc_mesh.cc40
1 files changed, 8 insertions, 32 deletions
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 18b5dd9d1e0..5a6058771c2 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1104,44 +1104,20 @@ void AbcMeshReader::readFaceSetsSample(Main *bmain, Mesh *mesh, size_t poly_star
utils::assign_materials(bmain, m_object, mat_map);
}
-typedef std::pair<Alembic::AbcCoreAbstract::index_t, float> index_time_pair_t;
-
static void get_weight_and_index(CDStreamConfig &config,
Alembic::AbcCoreAbstract::TimeSamplingPtr time_sampling,
size_t samples_number)
{
- if (samples_number == 0) {
- samples_number = 1;
- }
-
- index_time_pair_t floor_index = time_sampling->getFloorIndex(config.time, samples_number);
-
- config.index = floor_index.first;
- config.ceil_index = config.index;
-
- if (fabs(config.time - floor_index.second) < 0.0001f) {
- config.weight = 0.0f;
- return;
- }
+ Alembic::AbcGeom::index_t i0, i1;
- index_time_pair_t ceil_index = time_sampling->getCeilIndex(config.time, samples_number);
-
- if (config.index == ceil_index.first) {
- config.weight = 0.0f;
- return;
- }
-
- config.ceil_index = ceil_index.first;
-
- float alpha = (config.time - floor_index.second) / (ceil_index.second - floor_index.second);
-
- /* Since we so closely match the ceiling, we'll just use it. */
- if (fabs(1.0f - alpha) < 0.0001f) {
- config.index = config.ceil_index;
- alpha = 0.0f;
- }
+ config.weight = get_weight_and_index(config.time,
+ time_sampling,
+ samples_number,
+ i0,
+ i1);
- config.weight = alpha;
+ config.index = i0;
+ config.ceil_index = i1;
}
void read_mesh_sample(ImportSettings *settings,