Es gibt mehrere Möglichkeiten, dies zu erreichen, für einen einfachen rechteckigen Ausschnitt Sie scissor testing wie diese verwenden:
gl.enable(gl.SCISSOR_TEST);
gl.scissor(0,gl.canvas.clientHeight-256,256,256);
// draw track here
gl.disable(gl.SCISSOR_TEST);
Für einen kreisförmigen Ausschnitt Sie einen Schablonenpuffer verwenden könnte, um eine Platte die zeichnen Stencil Buffer, schablonieren und zeichnen Sie Ihre Spur, dies erfordert jedoch, dass Sie Ihre Rendering-Pipeline mit einem Framebuffer mit einem angehängten Stencil-Puffer, der ein wenig überwältigend sein kann und nur einen scharfen Ausschnitt gibt.
ein eigenes Fragment-Shader verwenden und in Kombination mit dem oben genannten Scheren rect Vermischung scheint, wie die vernünftigste Lösung hier, Setup Ihre Scheren, wie zuvor beschrieben, dann in den Fragment-Shader:
void main(void) {
// do what you need to do to get the final color
gl_FragColor.rgb = finalColor;
gl_FragColor.a = smoothstep(128.,100.,length(min(vec2(gl_FragCoord.x,resolution.y-gl_FragCoord.y),256.)-128.));
}
Was wir sind Hier wird der Abstand unseres aktuellen Pixels zum Mittelpunkt der Scherenregion berechnet (in der linken oberen Ecke des Bildschirms wird 256x256 angenommen), dann wird ein lineares Ausblenden zwischen 100 und 128 durchgeführt. Das Ergebnis ist eine Maske, die so aussieht :
Beachten Sie, dass wir den Scheren-Test technisch nicht mehr benötigen, da die Maske im Fragment-Shader alles außerhalb des kreisförmigen Bereichs maskiert. Der Scissor-Test stellt jedoch sicher, dass wir den Fragment-Shader nur dort ausführen, wo wir ihn brauchen.
Vielen Dank! Das hat perfekt funktioniert und auch eine ausgezeichnete Erklärung. – Craigo