[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