Masking shapes in HTML5 canvas?

后端 未结 2 519
情歌与酒
情歌与酒 2020-12-28 23:17

Apologies if this has been asked elsewhere but it\'s pretty hard to phrase as it is so I couldn\'t find anything.

Is there any way to implement masks in canv

2条回答
  •  执念已碎
    2020-12-28 23:57

    You should learn about clipping and compositing soon, but neither of these are what you actually need here.

    Instead you need to learn how to make paths using the non-zero winding number rule, which is what HTML5 canvas uses.

    If you draw part of your path clockwise and another part counter-clockwise, you can "cut out" shapes from your path.

    Here's an example with a window:

    http://jsfiddle.net/simonsarris/U5bXf/


    edit: Here's a bit of a visualization for you of how the nonzero winding number rule works:

    enter image description here

    Subpaths are drawn in a direction, and where the paths cross you'll get filled (or not) spaces.

    If you put your finger on any part of the figure, and imagine a line going from your finger out into the empty space, that line crosses the path a number of times. If you start at zero and add 1 for every clockwise path, and subtract 1 for every counterclockwise path, the filled areas are all of the areas that have a non-zero number. The numbers for the areas are given in the above diagram.

提交回复
热议问题