From db28ff54d650af69bfa6001c60548fcd689382e2 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Tue, 5 Apr 2016 16:08:45 +0900 Subject: Fix T47705: Freestyle line glitch. The addressed issue is a regression from Blender 2.75, after the internal switch from double to single precision floating-point numbers in the Freestyle code base. Face normal calculations require the higher precision during the computations, even though the results can be stored as single precision numbers. --- source/blender/freestyle/intern/winged_edge/WEdge.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'source/blender/freestyle') diff --git a/source/blender/freestyle/intern/winged_edge/WEdge.cpp b/source/blender/freestyle/intern/winged_edge/WEdge.cpp index 87ca3a4235f..99aa2d22239 100644 --- a/source/blender/freestyle/intern/winged_edge/WEdge.cpp +++ b/source/blender/freestyle/intern/winged_edge/WEdge.cpp @@ -640,18 +640,19 @@ WFace *WShape::MakeFace(vector& iVertexList, vector& iFaceEdgeM vector::iterator it; // compute the face normal (v1v2 ^ v1v3) - WVertex *v1, *v2, *v3; + // Double precision numbers are used here to avoid truncation errors [T47705] + Vec3r v1, v2, v3; it = iVertexList.begin(); - v1 = *it; + v1 = (*it)->GetVertex(); it++; - v2 = *it; + v2 = (*it)->GetVertex(); it++; - v3 = *it; + v3 = (*it)->GetVertex(); - Vec3f vector1(v2->GetVertex() - v1->GetVertex()); - Vec3f vector2(v3->GetVertex() - v1->GetVertex()); + Vec3r vector1(v2 - v1); + Vec3r vector2(v3 - v1); - Vec3f normal(vector1 ^ vector2); + Vec3r normal(vector1 ^ vector2); normal.normalize(); face->setNormal(normal); -- cgit v1.2.3