- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里查看所有不同类型的全局复合操作:
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
他们都没有做我想做的事情。有没有办法定义自定义的 globalCompositeOperation?如果我可以创建一个着色器,然后每次使用 CanvasRenderingContext2D.draw 方法绘制内容时都使用它,那将是完美的。
具体来说,在每个像素的基础上,我希望 CanvasRenderingContext2D.draw 方法使用以下(伪代码)操作:
if the existing canvas color alpha is 0.0,
then draw the new shape's color and set alpha to 0.1
if the existing canvas color is the same as the new shape's color
then increase the alpha, by 0.1
if the existing canvas color is different from the the new shape's color
then decrease the alpha by 0.1
我的想法是否正确?我感觉我应该以某种方式使用 WebGLRenderingContext,但我对它们如何组合在一起有点犹豫。
最佳答案
答案大多是否定的。
无法使用 Canvas2D 定义您自己的 globalCompositeOperation
。
我想到了 2 个解决方案
使用 2 个 Canvas ,一个 2d Canvas 和一个 WebGL Canvas
for each shape
clear the 2d canvas
draw the shape into the 2d canvas
upload the canvas to a webgl texture
composite that texture with the previous results using a custom shader.
这个解决方案的问题是它会很慢,因为将 Canvas 上传到纹理是一个相对较慢的操作。但是,这意味着您可以使用所有 Canvas 功能,如 stroke
和 arc
以及渐变等来构建它的形状。
完全切换到 WebGL
这里的问题是您无法访问 2D API 的所有功能,并且复制所有这些功能需要大量工作。
另一方面,如果您只使用有限的一组,那么工作量可能不会太大。例如,如果您只使用 drawImage
、fillRect
、clear
,也许还有 moveTo
和 lineTo
, fill
和 stroke
然后在 WebGL 中重现会相对容易。如果您使用了很多功能,例如 mask 、贝塞尔曲线、渐变或图案,它就会开始变得更加繁琐。
作为首发here's a tutorial that presents a certain kind of compositing or image processing这是 WebGL 中 globalCompositeOperation
的基本技术。上述两种解决方案都需要这种基本类型的解决方案来在每个 shape
之后合成结果。
关于html5-canvas - html5 Canvas 中的自定义 globalCompositeOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562311/
在使用 ng-lottie 时用于动画。它突然出现构建问题。 Know more . 因此,为了寻找替代品,我正在尝试 ng-particles . 我已经安装了它并按照文档添加了配置。 但是,现在我
我有一个简单的代码,我想为播放器创建蒙版。 ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(level1, 0, 0);
我在 html5 Canvas 的 javascript 中使用 globalCompositeOperation 时遇到问题。 https://jsfiddle.net/6j51kxeh/ 我使用“
我有一个大的源图像,我想在一个圆圈内显示它的一小部分,并使圆圈外的 Canvas 部分保持透明。 Mozilla guide to Compositing with HTML5涵盖两个主题:globa
如何使用此函数在红色和绿色框之间放置一个蓝色框? 我需要实现这个效果。 这是一个 Codepen . HTML JS var canvas = document.getElementById("c
我有一个 Canvas ,其中包含透明背景上的艺术。我像这样降低饱和度: boardCtx.fillStyle = "rgba(0, 0, 0, 1.0)"; boardCtx.globalCompo
我正在尝试创建径向进度 View 。 Canvas 中的第二条弧应该只清除 Canvas 的一小部分,但它却将其全部清除。 我用过: this.ctx.globalCompositeOperation
我如何将 globalCompositeOperation(或任何其他可以给我“multiply”颜色操作的插件)集成到 jCanvas 中jQuery 插件? // How do I get thi
我正在尝试编写 Sierpinski 地毯前几次迭代的简单演示,如下所示: 我想要继续的方法是通过单击以在每一步上以较小的比例应用基本图案蒙版。在我看来,通过从一个黑色方 block 开始,然后使用“
我有这 4 个层。 我想做的是将 red 和 blue 层放入一个 mask 中。但我不希望 purple 或 orange 层受到此掩码的影响(只有 red 和 blue).我设法让它适用于 ora
我正在努力思考 globalCompositeOperation通过尝试组合这两个示例来获得属性:JSFiddle和 Codepen . 前者使用destination-out,后者使用source-
我对 globalCompositeOperation 有疑问。 我的目标是让蓝色元素仅显示在红色元素内部,并且根本不应该在红色矩形外部可见(有点溢出隐藏效果)。另外,红色和蓝色都必须具有转换能力(都
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在尝试使用globalCompositeOperation在 内的对象上元素,但我的目标是与 Canvas 外部的对象混合 - 一个简单的 html 标记元素,如段落。 我的最终目标是使用 di
如何使用 globalCompositeOperation 删除某些内容? http://canvaspaint.org/有一个橡皮擦,但那只是一条白线 - 只有当你的背景是白色的时候才行......
我正在尝试使用 Canvas 的 globalCompositeOperation='destination-in' 设置来绘制一系列被径向渐变掩盖的点。我想要的结果显示在下面的屏幕截图中: 相反,我
每年年底我都会制作一个烟花表演 Canvas 效果(Javascript),最后一个是: http://js1k.com/2011-dysentery/demo/955 这个效果很简单:用create
我在这里查看所有不同类型的全局复合操作: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globa
我知道 ctx.globalcompositeoperation=source-over 在使用 drawimage 时有效,但它可以与 putimagedata 一起使用吗? 最佳答案 简短的回答是
有没有一种方法可以“更轻量”地使用 globalCompositeOperation,同时使用 source-atop? (又名打火机,但仅限于已经绘制了一些东西的地方。) 最佳答案 一次只能设置一项
我是一名优秀的程序员,十分优秀!