Mantengo renderizadores paralelos de Flash y HTML5/Canvas para el proyecto OpenHeatMap de código abierto. Estoy plagado de una inconsistencia en la representación de polígonos llenos con coordenadas fraccionales entre las dos versiones. Si renderiza dos polígonos que comparten un borde, Canvas mostrará una unión visible a lo largo de ese borde, mientras que Flash combinará los dos juntos, sin diferencia visible si son del mismo color. He creado una página para mostrar un mínimo de aquí la cuestión:¿Cómo puedo evitar artefactos de costura de borde de polígono en HTML5 Canvas?
http://web.mailana.com/labs/stitchingbug/
[Gak, prevención de spam deja esto de ser una imagen, pero ver aquí para una captura de pantalla web.mailana.com/labs/stitchingbug .png]
la fuente, junto con un proyecto de flash haciendo lo mismo, es aquí:
github.com/petewarden/stitchingbug
la cuestión fundamental es que es imposible hacer cualquier poligonal compleja r endering si no puedes unir polígonos juntos sin costuras. No sé exactamente cuáles son las reglas de relleno de Flash, pero producen los resultados correctos, al igual que los renderizadores 3D. ¿Alguien tiene una solución del lado del cliente para solucionar este problema? Es un navegador cruzado, lo que lo hace parecer deliberado, por lo que también se apreciará cualquier referencia a las reglas utilizadas. Aquí está el código de Canvas:
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'rgb(0,0,0)';
ctx.beginPath()
ctx.moveTo(0, 0);
ctx.lineTo(50.5, 0);
ctx.lineTo(50.5, 100);
ctx.lineTo(0, 100);
ctx.closePath();
ctx.fill();
ctx.beginPath()
ctx.moveTo(50.5, 0);
ctx.lineTo(100, 0);
ctx.lineTo(100, 100);
ctx.lineTo(50.5, 100);
ctx.closePath();
ctx.fill();
Lluvia de ideas: calcular el centro de cada polígono y en la elaboración de empujar los puntos hacia fuera del centro por una pequeña cantidad (quizás 0.5). Fuerce un ligero sobregiro del anti-aliasing. – Phrogz
Consulte la segunda mitad de [esta respuesta] (http://stackoverflow.com/questions/15631426/svg-fill-not-filling-boundary/15638764#comment22224474_15638764) para comprender por qué simplemente no puede resolver este problema sin un 'hack' 'como un derrame cerebral o relleno insuficiente cuando está involucrado el anti-aliasing. – Phrogz