[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