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:
authorBastien Montagne <montagne29@wanadoo.fr>2014-02-12 23:48:09 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-02-12 23:48:09 +0400
commit70905a6e02a05b650acfb894265b3a2d201f193b (patch)
tree3dc7ae6303823cabc6364c059939f7fc0406f6f8 /source/blender/blenkernel/intern/editderivedmesh.c
parentf9a60ecacd9754f6673e2dc9775d6bb1cb89033e (diff)
Fix Editderivedmeshes vertices normals computation.
Those derived meshes (used in Edit mode) were using simple sum of neighbor poly normals to get vertex normals, while everywhere else in Blender we use weighted sum of such poly normals. Patch: D311 Reviewed and enhanced by Campbell, thanks!
Diffstat (limited to 'source/blender/blenkernel/intern/editderivedmesh.c')
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c25
1 files changed, 3 insertions, 22 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 308838c3b8f..0b89e6c0960 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -92,35 +92,16 @@ static void emDM_ensureVertNormals(EditDerivedBMesh *bmdm)
const float (*vertexCos)[3], (*polyNos)[3];
float (*vertexNos)[3];
- BMFace *efa;
- BMVert *eve;
- BMIter fiter;
- BMIter viter;
- int i;
-
- vertexCos = bmdm->vertexCos;
- vertexNos = MEM_callocN(sizeof(*vertexNos) * bm->totvert, __func__);
-
/* calculate vertex normals from poly normals */
emDM_ensurePolyNormals(bmdm);
BM_mesh_elem_index_ensure(bm, BM_FACE);
- vertexCos = bmdm->vertexCos;
polyNos = bmdm->polyNos;
+ vertexCos = bmdm->vertexCos;
+ vertexNos = MEM_callocN(sizeof(*vertexNos) * bm->totvert, __func__);
- BM_ITER_MESH_INDEX (eve, &viter, bm, BM_VERTS_OF_MESH, i) {
- float *no = vertexNos[i];
- BM_ITER_ELEM (efa, &fiter, eve, BM_FACES_OF_VERT) {
- add_v3_v3(no, polyNos[BM_elem_index_get(efa)]);
- }
-
- /* following Mesh convention; we use vertex coordinate itself
- * for normal in this case */
- if (UNLIKELY(normalize_v3(no) == 0.0f)) {
- normalize_v3_v3(no, vertexCos[i]);
- }
- }
+ BM_verts_calc_normal_vcos(bm, polyNos, vertexCos, vertexNos);
bmdm->vertexNos = (const float (*)[3])vertexNos;
}