[Bf-blender-cvs] [2e2fab2f3b9] functions: cleanup
Jacques Lucke
noreply at git.blender.org
Mon Jul 1 17:47:22 CEST 2019
Commit: 2e2fab2f3b9d3100048c65c8fc55648953eba232
Author: Jacques Lucke
Date: Mon Jul 1 17:12:10 2019 +0200
Branches: functions
https://developer.blender.org/rB2e2fab2f3b9d3100048c65c8fc55648953eba232
cleanup
===================================================================
M source/blender/simulations/bparticles/events.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 2404829bbea..9f9182a2556 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -48,6 +48,13 @@ class MeshBounceEvent : public Event {
float3 normal;
};
+ struct RayCastResult {
+ bool success;
+ int index;
+ float3 normal;
+ float distance;
+ };
+
public:
MeshBounceEvent(BVHTreeFromMesh *treedata, float4x4 transform)
: m_treedata(treedata),
@@ -70,29 +77,25 @@ class MeshBounceEvent : public Event {
for (uint i : particles.range()) {
uint pindex = particles.get_particle_index(i);
- float3 start_position = m_ray_transform.transform_position(positions[pindex]);
- float3 direction = m_ray_transform.transform_direction(position_offsets[i]);
- float length = direction.normalize_and_get_length();
+ float3 ray_start = m_ray_transform.transform_position(positions[pindex]);
+ float3 ray_direction = m_ray_transform.transform_direction(position_offsets[i]);
+ float length = ray_direction.normalize_and_get_length();
- float3 hit_normal;
- float hit_distance;
- if (this->ray_cast(start_position, direction, length, hit_distance, hit_normal)) {
- float time_factor = hit_distance / length;
+ auto result = this->ray_cast(ray_start, ray_direction, length);
+ if (result.success) {
+ float time_factor = result.distance / length;
auto &data = interface.trigger_particle<CollisionData>(i, time_factor);
- if (float3::dot(hit_normal, direction) > 0) {
- hit_normal.invert();
+ float3 normal = result.normal;
+ if (float3::dot(normal, ray_direction) > 0) {
+ normal.invert();
}
- data.normal = m_normal_transform.transform_direction(hit_normal).normalized();
+ data.normal = m_normal_transform.transform_direction(normal).normalized();
}
}
}
- bool ray_cast(float3 start,
- float3 normalized_direction,
- float max_distance,
- float &r_hit_distance,
- float3 &r_hit_normal)
+ RayCastResult ray_cast(float3 start, float3 normalized_direction, float max_distance)
{
BVHTreeRayHit hit;
hit.dist = max_distance;
@@ -105,9 +108,7 @@ class MeshBounceEvent : public Event {
m_treedata->raycast_callback,
(void *)m_treedata);
- r_hit_distance = hit.dist;
- r_hit_normal = hit.no;
- return hit.index >= 0;
+ return {hit.index >= 0, hit.index, float3(hit.no), hit.dist};
}
void execute(EventExecuteInterface &interface) override
More information about the Bf-blender-cvs
mailing list