Skip to content

Commit 5819d93

Browse files
author
HarshKhandeparkar
committed
fix: use Xiaolin Wu's algorithm for
line anti aliasing
1 parent db24977 commit 5819d93

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

src/kernels/interpolate.ts

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -61,36 +61,34 @@ export function getInterpolateKernel(
6161
const graphColor = graphPixels[this.thread.y][this.thread.x];
6262
6363
if (
64-
(
65-
lineDist <= lineThickness + 1 &&
66-
x <= Math.max(x1, x2) + (lineThickness + 1) * lineSine &&
67-
x >= Math.min(x1, x2) - (lineThickness + 1) * lineSine &&
68-
y <= Math.max(y1, y2) + (lineThickness + 1) * lineCosine &&
69-
y >= Math.min(y1, y2) - (lineThickness + 1) * lineCosine
70-
)
64+
lineDist >= lineThickness &&
65+
lineDist <= lineThickness + 1 &&
66+
x <= Math.max(x1, x2) + (lineThickness) * lineSine &&
67+
x >= Math.min(x1, x2) - (lineThickness) * lineSine &&
68+
y <= Math.max(y1, y2) + (lineThickness) * lineCosine &&
69+
y >= Math.min(y1, y2) - (lineThickness) * lineCosine
7170
) {
72-
let intensity = 0;
73-
74-
// The following code basically blurs the line by convolving a simple average kernel
75-
// Very crude implementation of https://developer.nvidia.com/gpugems/gpugems2/part-iii-high-quality-rendering/chapter-22-fast-prefiltered-lines
76-
for (let i = x - 1; i <= x + 1; i++) {
77-
for (let j = y - 1; j <= y + 1; j++) {
78-
let lineEqn = i * (y1 - y2) - x1 * (y1 - y2) - j * (x1 - x2) + y1 * (x1 - x2);
79-
let lineDist = Math.abs(lineEqn) / Math.sqrt((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2));
80-
81-
intensity += (1 / 9) * Math.min(
82-
1,
83-
Math.floor(lineThickness / lineDist)
84-
)
85-
}
86-
}
71+
let intensity = Math.max(0, 1 - (lineDist - lineThickness));
8772
8873
return [
8974
lineColor[0] * intensity + graphColor[0] * (1 - intensity),
9075
lineColor[1] * intensity + graphColor[1] * (1 - intensity),
9176
lineColor[2] * intensity + graphColor[2] * (1 - intensity)
9277
]
9378
}
79+
else if (
80+
lineDist < lineThickness &&
81+
x <= Math.max(x1, x2) + (lineThickness) * lineSine &&
82+
x >= Math.min(x1, x2) - (lineThickness) * lineSine &&
83+
y <= Math.max(y1, y2) + (lineThickness) * lineCosine &&
84+
y >= Math.min(y1, y2) - (lineThickness) * lineCosine
85+
) {
86+
return [
87+
lineColor[0],
88+
lineColor[1],
89+
lineColor[2]
90+
]
91+
}
9492
else return graphColor;
9593
}`,
9694
{

0 commit comments

Comments
 (0)