[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58129] trunk/blender/source/blender/ freestyle/intern/blender_interface: Fix for bug #36009: Rendered ortho view messes up Freestyle lines in 3D viewport.

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Wed Jul 10 01:25:02 CEST 2013


Revision: 58129
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58129
Author:   kjym3
Date:     2013-07-09 23:25:02 +0000 (Tue, 09 Jul 2013)
Log Message:
-----------
Fix for bug #36009: Rendered ortho view messes up Freestyle lines in 3D viewport.

Clipping start is negative when the viewport preview is used with the orthographic view,
while Freestyle assumes that imported mesh data are in the camera coordinate system
with the view point located at origin.  The present solution is to adjust the clipping
start/end and introduce a Z-axis offset for mesh vertices so as to satisfy the assumption.

Modified Paths:
--------------
    trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
    trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h

Modified: trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
===================================================================
--- trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp	2013-07-09 22:27:18 UTC (rev 58128)
+++ trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp	2013-07-09 23:25:02 UTC (rev 58129)
@@ -22,10 +22,10 @@
  *  \ingroup freestyle
  */
 
-#include <assert.h>
-
 #include "BlenderFileLoader.h"
 
+#include "BLI_utildefines.h"
+
 #include "BKE_global.h"
 
 namespace Freestyle {
@@ -60,8 +60,23 @@
 	_viewplane_right =  _re->viewplane.xmax;
 	_viewplane_bottom = _re->viewplane.ymin;
 	_viewplane_top =    _re->viewplane.ymax;
-	_z_near = -_re->clipsta;
-	_z_far =  -_re->clipend;
+
+	if ((_re->r.scemode & R_VIEWPORT_PREVIEW) && (_re->r.mode & R_ORTHO)) {
+		// Adjust clipping start/end and set up a Z offset when the viewport preview
+		// is used with the orthographic view.  In this case, _re->clipsta is negative,
+		// while Freestyle assumes that imported mesh data are in the camera coordinate
+		// system with the view point located at origin [bug #36009].
+		BLI_assert(_re->clipsta < 0.f);
+		_z_near = -0.001f;
+		_z_offset = _re->clipsta + _z_near;
+		_z_far = -_re->clipend + _z_offset;
+	}
+	else {
+		_z_near = -_re->clipsta;
+		_z_far = -_re->clipend;
+		_z_offset = 0.f;
+	}
+
 #if 0
 	if (G.debug & G_DEBUG_FREESTYLE) {
 		cout << "Frustum: l " << _viewplane_left << " r " << _viewplane_right
@@ -225,7 +240,7 @@
 			}
 		}
 	}
-	assert(k == 2 + numTris);
+	BLI_assert(k == 2 + numTris);
 }
 
 void BlenderFileLoader::addTriangle(struct LoaderState *ls, float v1[3], float v2[3], float v3[3],
@@ -378,6 +393,11 @@
 			if (vlr->v4)
 				mul_m4_v3(obi->mat, v4);
 		}
+		v1[2] += _z_offset;
+		v2[2] += _z_offset;
+		v3[2] += _z_offset;
+		if (vlr->v4)
+			v4[2] += _z_offset;
 #if 0
 		print_v3("v1", v1);
 		print_v3("v2", v2);
@@ -472,6 +492,11 @@
 			if (vlr->v4)
 				mul_m4_v3(obi->mat, v4);
 		}
+		v1[2] += _z_offset;
+		v2[2] += _z_offset;
+		v3[2] += _z_offset;
+		if (vlr->v4)
+			v4[2] += _z_offset;
 		if (_smooth && (vlr->flag & R_SMOOTH)) {
 			copy_v3_v3(n1, vlr->v1->n);
 			copy_v3_v3(n2, vlr->v2->n);

Modified: trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
===================================================================
--- trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h	2013-07-09 22:27:18 UTC (rev 58128)
+++ trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h	2013-07-09 23:25:02 UTC (rev 58129)
@@ -122,6 +122,7 @@
 	float _viewplane_bottom;
 	float _viewplane_top;
 	float _z_near, _z_far;
+	float _z_offset;
 
 	RenderMonitor *_pRenderMonitor;
 




More information about the Bf-blender-cvs mailing list