Commit: b0ba1328b4cde9e14e6c8effeb338d15b0a785aa
Author: Lukas Tönne
Date:   Wed Jul 13 05:33:18 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rBb0ba1328b4cde9e14e6c8effeb338d15b0a785aa

Ensure correct storage of curve normals and tangents with edit BMesh curves.

===================================================================

M       source/blender/blenkernel/intern/strands.c
M       source/blender/gpu/intern/gpu_buffers.c

===================================================================

diff --git a/source/blender/blenkernel/intern/strands.c 
b/source/blender/blenkernel/intern/strands.c
index 75ed2f7..543f0d9 100644
--- a/source/blender/blenkernel/intern/strands.c
+++ b/source/blender/blenkernel/intern/strands.c
@@ -251,15 +251,15 @@ static int curve_cache_subdivide(StrandCurveCache *cache, 
int orig_num_verts, in
 }
 
 static void curve_cache_transport_frame(StrandCurveCache *cache, int num_verts,
-                                        const float normal[3], const float 
tangent[3])
+                                        float rootmat[4][4])
 {
        const float (*verts)[3] = cache->verts;
        float (*dir)[3] = cache->normals;
        float (*codir)[3] = cache->tangents;
        float prev_dir[3], prev_codir[3];
        
-       copy_v3_v3(prev_dir, normal);
-       copy_v3_v3(prev_codir, tangent);
+       copy_v3_v3(prev_dir, rootmat[2]);
+       copy_v3_v3(prev_codir, rootmat[0]);
        
        for (int i = 0; i < num_verts - 1; ++i) {
                float rot[3][3];
@@ -295,7 +295,7 @@ int BKE_strand_curve_cache_calc(const StrandVertex 
*orig_verts, int orig_num_ver
        }
        
        int num_verts = curve_cache_subdivide(cache, orig_num_verts, subdiv);
-       curve_cache_transport_frame(cache, num_verts, rootmat[2], rootmat[0]);
+       curve_cache_transport_frame(cache, num_verts, rootmat);
        return num_verts;
 }
 
@@ -311,13 +311,14 @@ int BKE_strand_curve_cache_calc_bm(BMVert *root, int 
orig_num_verts, StrandCurve
                BMIter iter;
                BMVert *v;
                BM_ITER_STRANDS_ELEM(v, &iter, root, BM_VERTS_OF_STRAND) {
-                       mul_v3_m4v3(verts[index], rootmat, v->co);
+                       /* BMesh already stores verts in object space, no need 
to apply the rootmat */
+                       copy_v3_v3(verts[index], v->co);
                        index += step;
                }
        }
        
        int num_verts = curve_cache_subdivide(cache, orig_num_verts, subdiv);
-       curve_cache_transport_frame(cache, num_verts, rootmat[2], rootmat[0]);
+       curve_cache_transport_frame(cache, num_verts, rootmat);
        return num_verts;
 }
 
diff --git a/source/blender/gpu/intern/gpu_buffers.c 
b/source/blender/gpu/intern/gpu_buffers.c
index 3276b6e..6d9d0d2 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -2639,17 +2639,15 @@ static void 
strands_copy_control_attribute_data(GPUDrawStrandsParams *params, vo
                
                StrandCurveCache *cache = BKE_strand_curve_cache_create_bm(bm, 
params->subdiv);
                
-               /* Note: edit bmesh has all vertices in object space already,
-                * so we don't need to apply curve transforms!
-                */
-               float rootmat[4][4];
-               unit_m4(rootmat);
-               
                BMIter iter;
                BMVert *root;
                BM_ITER_STRANDS(root, &iter, bm, BM_STRANDS_OF_MESH) {
+                       float rootmat[4][4];
+                       BKE_editstrands_get_matrix(params->edit, root, rootmat);
+                       
                        int orig_num_verts = BM_strand_verts_count(root);
                        int num_verts = BKE_strand_curve_cache_calc_bm(root, 
orig_num_verts, cache, rootmat, params->subdiv);
+                       BLI_assert(orig_num_verts >= 2);
                        
                        strands_copy_control_cache_attribute_data(cache, 
num_verts, &varray, type);
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to