[Bf-blender-cvs] [f2421c042ea] functions: abstract interpolated vectors and matrices
Jacques Lucke
noreply at git.blender.org
Mon Jul 15 18:12:38 CEST 2019
Commit: f2421c042ea76065a8ebe294a58bfd17906847e1
Author: Jacques Lucke
Date: Mon Jul 15 15:35:45 2019 +0200
Branches: functions
https://developer.blender.org/rBf2421c042ea76065a8ebe294a58bfd17906847e1
abstract interpolated vectors and matrices
===================================================================
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/emitters.hpp
M source/blender/simulations/bparticles/inserters.cpp
M source/blender/simulations/bparticles/world_state.hpp
===================================================================
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 919c5eaf636..1166433c3e8 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -23,7 +23,7 @@ void PointEmitter::emit(EmitterInterface &interface)
for (uint i = 0; i < m_amount; i++) {
float t = i / (float)m_amount;
- float3 point = float3::interpolate(m_start, m_end, t);
+ float3 point = m_point.interpolate(t);
new_positions[i] = point;
}
@@ -89,11 +89,8 @@ void SurfaceEmitter::emit(EmitterInterface &interface)
normal_tri_v3(normal, v1, v2, v3);
float epsilon = 0.01f;
- /* TODO: interpolate decomposed matrices */
- float4x4 transform_at_birth = float4x4::interpolate(
- m_transform_start, m_transform_end, birth_moment);
- float4x4 transform_before_birth = float4x4::interpolate(
- m_transform_start, m_transform_end, birth_moment - epsilon);
+ float4x4 transform_at_birth = m_transform.interpolate(birth_moment);
+ float4x4 transform_before_birth = m_transform.interpolate(birth_moment - epsilon);
float3 point_at_birth = transform_at_birth.transform_position(pos);
float3 point_before_birth = transform_before_birth.transform_position(pos);
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index f95d1c55407..de3a50e0204 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -16,7 +16,7 @@ struct SurfaceEmitter : public Emitter {
std::unique_ptr<Action> m_action;
Object *m_object;
- float4x4 m_transform_start, m_transform_end;
+ InterpolatedFloat4x4 m_transform;
float m_rate;
float m_normal_velocity;
float m_emitter_velocity;
@@ -27,7 +27,7 @@ struct SurfaceEmitter : public Emitter {
struct PointEmitter : public Emitter {
std::string m_particle_type_name;
- float3 m_start, m_end;
+ InterpolatedFloat3 m_point;
uint m_amount;
void emit(EmitterInterface &interface) override;
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index fa4f59aeec0..98bbab3800f 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -243,9 +243,8 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_mesh_surface(BuildContext &ctx,
emitter->m_emitter_velocity = fn_out.get<float>(3);
emitter->m_size = fn_out.get<float>(4);
- emitter->m_transform_end = emitter->m_object->obmat;
- emitter->m_transform_start = ctx.world_state.get_last_and_store_current(
- bnode->name, emitter->m_transform_end);
+ emitter->m_transform = ctx.world_state.get_interpolated_value(bnode->name,
+ emitter->m_object->obmat);
return emitter;
}
@@ -263,8 +262,7 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
auto emitter = std::unique_ptr<PointEmitter>(new PointEmitter());
emitter->m_particle_type_name = particle_type_name.to_std_string();
- emitter->m_end = fn_out.get<float3>(0);
- emitter->m_start = ctx.world_state.get_last_and_store_current(bnode->name, emitter->m_end);
+ emitter->m_point = ctx.world_state.get_interpolated_value(bnode->name, fn_out.get<float3>(0));
emitter->m_amount = 10;
return emitter;
}
diff --git a/source/blender/simulations/bparticles/world_state.hpp b/source/blender/simulations/bparticles/world_state.hpp
index 949eb787425..2a0625ae0e9 100644
--- a/source/blender/simulations/bparticles/world_state.hpp
+++ b/source/blender/simulations/bparticles/world_state.hpp
@@ -13,6 +13,25 @@ using BLI::SmallMap;
using BLI::StringMap;
using BLI::StringRef;
+struct InterpolatedFloat3 {
+ float3 start, end;
+
+ float3 interpolate(float t)
+ {
+ return float3::interpolate(start, end, t);
+ }
+};
+
+struct InterpolatedFloat4x4 {
+ /* TODO: store decomposed matrices */
+ float4x4 start, end;
+
+ float4x4 interpolate(float t)
+ {
+ return float4x4::interpolate(start, end, t);
+ }
+};
+
class WorldState {
private:
template<typename T> struct OldAndNew {
@@ -49,6 +68,18 @@ class WorldState {
}
}
+ InterpolatedFloat3 get_interpolated_value(StringRef id, float3 current)
+ {
+ float3 last = this->get_last_and_store_current(id, current);
+ return {last, current};
+ }
+
+ InterpolatedFloat4x4 get_interpolated_value(StringRef id, float4x4 current)
+ {
+ float4x4 last = this->get_last_and_store_current(id, current);
+ return {last, current};
+ }
+
void current_step_is_over()
{
for (auto &item : m_float3.values()) {
More information about the Bf-blender-cvs
mailing list