[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48000] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/view_map/SilhouetteGeomEngine.cpp: Fix for NaN' s in the Z component of projected points by SilhouetteGeomEngine:: ProjectSilhouette().

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Sat Jun 16 23:15:51 CEST 2012


Revision: 48000
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48000
Author:   kjym3
Date:     2012-06-16 21:15:50 +0000 (Sat, 16 Jun 2012)
Log Message:
-----------
Fix for NaN's in the Z component of projected points by SilhouetteGeomEngine::ProjectSilhouette().
This issue arises when the Z depth of the bounding box of the scene being rendered is zero.

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/SilhouetteGeomEngine.cpp

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/SilhouetteGeomEngine.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/SilhouetteGeomEngine.cpp	2012-06-16 20:20:07 UTC (rev 47999)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/SilhouetteGeomEngine.cpp	2012-06-16 21:15:50 UTC (rev 48000)
@@ -113,13 +113,15 @@
   //  real min=HUGE;
   //  real max=-HUGE;
   vector<SVertex*>::iterator sv, svend;
+  const real depth = _zfar - _znear;
+  const real fac = (depth < 1e-6) ? 1.0 : 1.0 / depth;
   
   for(sv=ioVertices.begin(), svend=ioVertices.end();
       sv!=svend;
       sv++)
     {
       GeomUtils::fromWorldToImage((*sv)->point3D(), newPoint, _modelViewMatrix, _projectionMatrix, _viewport);
-      newPoint[2] = (-newPoint[2]-_znear)/(_zfar-_znear); // normalize Z between 0 and 1
+      newPoint[2] = (-newPoint[2]-_znear) * fac; // normalize Z between 0 and 1
       (*sv)->setPoint2D(newPoint);  
       //cerr << (*sv)->point2d().z() << "  ";
       //      real d=(*sv)->point2d()[2];
@@ -142,8 +144,10 @@
   //  real min=HUGE;
   //  real max=-HUGE;
   vector<SVertex*>::iterator sv, svend;
+  const real depth = _zfar - _znear;
+  const real fac = (depth < 1e-6) ? 1.0 : 1.0 / depth;
   GeomUtils::fromWorldToImage(ioVertex->point3D(), newPoint, _modelViewMatrix, _projectionMatrix, _viewport);
-  newPoint[2] = (-newPoint[2]-_znear)/(_zfar-_znear); // normalize Z between 0 and 1
+  newPoint[2] = (-newPoint[2]-_znear) * fac; // normalize Z between 0 and 1
   ioVertex->setPoint2D(newPoint);  
 }
 
@@ -257,9 +261,11 @@
 
 {
 
+  const real depth = _zfar - _znear;
+  const real fac = (depth < 1e-6) ? 1.0 : 1.0 / depth;
   Vec3r newPoint;
   GeomUtils::fromWorldToImage(M, newPoint, _transform, _viewport);
-  newPoint[2] = (-newPoint[2]-_znear)/(_zfar-_znear); // normalize Z between 0 and 1
+  newPoint[2] = (-newPoint[2]-_znear) * fac; // normalize Z between 0 and 1
   return newPoint;
 
 }




More information about the Bf-blender-cvs mailing list