[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59011] branches/soc-2011-tomato/source/ blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp: Plane mask anti-aliasing experiment

Sergey Sharybin sergey.vfx at gmail.com
Thu Aug 8 09:38:35 CEST 2013


Revision: 59011
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59011
Author:   nazgul
Date:     2013-08-08 07:38:35 +0000 (Thu, 08 Aug 2013)
Log Message:
-----------
Plane mask anti-aliasing experiment

Currently uses hardcoded kernel size of 4, which means
node is actually 16 times slower now, but gives pretty
much nice anti-aliased results.

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp

Modified: branches/soc-2011-tomato/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp
===================================================================
--- branches/soc-2011-tomato/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp	2013-08-08 07:38:27 UTC (rev 59010)
+++ branches/soc-2011-tomato/source/blender/compositor/operations/COM_PlaneTrackMaskOperation.cpp	2013-08-08 07:38:35 UTC (rev 59011)
@@ -40,23 +40,28 @@
 
 void PlaneTrackMaskOperation::executePixel(float output[4], float x, float y, PixelSampler sampler)
 {
+	const int kernel_size = 4;
 	float point[2];
 	float frame_space_corners[4][2];
 
 	for (int i = 0; i < 4; i++) {
-		frame_space_corners[i][0] = this->m_corners[i][0] * this->getWidth();
-		frame_space_corners[i][1] = this->m_corners[i][1] * this->getHeight();
+		frame_space_corners[i][0] = this->m_corners[i][0] * this->getWidth() * kernel_size;
+		frame_space_corners[i][1] = this->m_corners[i][1] * this->getHeight() * kernel_size;
 	}
 
-	point[0] = x;
-	point[1] = y;
+	int inside_counter = 0;
+	for (int dx = 0; dx < kernel_size; dx++) {
+		for (int dy = 0; dy < kernel_size; dy++) {
+			point[0] = x * kernel_size + dx;
+			point[1] = y * kernel_size + dy;
 
-	if (isect_point_tri_v2(point, frame_space_corners[0], frame_space_corners[1], frame_space_corners[2]) ||
-	    isect_point_tri_v2(point, frame_space_corners[0], frame_space_corners[2], frame_space_corners[3]))
-	{
-		output[0] = 1.0f;
+			if (isect_point_tri_v2(point, frame_space_corners[0], frame_space_corners[1], frame_space_corners[2]) ||
+			    isect_point_tri_v2(point, frame_space_corners[0], frame_space_corners[2], frame_space_corners[3]))
+			{
+				inside_counter++;
+			}
+		}
 	}
-	else {
-		output[0] = 0.0f;
-	}
+
+	output[0] = (float) inside_counter / (kernel_size * kernel_size);
 }




More information about the Bf-blender-cvs mailing list