gpt4 book ai didi

javascript - 钻石/玻璃效果

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:50:45 26 4
gpt4 key购买 nike

我正在制作 Canvas 动画,其中一个图像应该是钻石。

现在,我做到了这一点:

ctx[0].beginPath();
ctx[0].moveTo(0,-80);
ctx[0].lineTo(-60,-130);
ctx[0].lineTo(-36,-160);
ctx[0].lineTo(36,-160);
ctx[0].lineTo(60,-130);
ctx[0].closePath();
ctx[0].fillStyle = "rgba(175,175,255,0.7)";
ctx[0].fill();

它绘制了一个普通的浅蓝色半透明钻石形状。

这太简单了,但我在“颜色”方面遇到了严重的问题。我猜类似玻璃的东西应该可以解决问题,但到目前为止我还没有发现任何有用的东西。如果有帮助,我可以根据需要添加任意多的行,但颜色是我的主要问题。

这将被预渲染,所以很长,复杂的代码不是什么大问题。不过,我宁愿不使用图像。

总结:我需要 Canvas 的玻璃效果。有什么想法吗?

最佳答案

我认为您在玻璃(或者,大概是钻石)中寻找的是它不是完全透明或平坦的。相反,它反射(reflect)了它的周围环境并稍微扭曲了它的背景。您可以通过径向渐变来呈现反射的外观。然而,失真更棘手。您可以移动和缩放对象后面的每个像素,但这将非常难以实现,更不用说非常慢了。或者,您可以实现一个非常精细、快速移动的渐变,这会使下面的像素看起来失真,即使实际上并没有发生。

这是一个具有反射和扭曲的玻璃板的实现。

<html>
<canvas id="canvas" style="position:fixed;">
</canvas>
<script type="text/javascript">
document.getElementById("canvas").height=window.innerHeight;
document.getElementById("canvas").width=window.innerWidth;
ctx=document.getElementById("canvas").getContext("2d");
textWidth=ctx.measureText("Hello World! ");
textWidth=Math.ceil(textWidth.width);
ctx.lineWidth=3;
targetWidth=Math.floor(window.innerWidth/textWidth)*textWidth;
for(i=0;i<500;i++)
{
ctx.fillText("Hello World! ",((i*textWidth)%(targetWidth)),(16*Math.floor((i+1)*textWidth/window.innerWidth)+16));
}
var glass = ctx.createRadialGradient(80,110,0,100,140,100);
for(i=0;i<=100;i++)
{
redComponent=Math.round(210-(i%11));
greenComponent=Math.round(245-(i%7));
blueComponent=Math.round(255-(i%5));
opacity=Math.round(((i%3)+1)*Math.sin(i/200*Math.PI)*1000)/3000;
glass.addColorStop(i/100,"rgba("+redComponent+","+greenComponent+","+blueComponent+","+opacity+")");
}
glass.addColorStop(1,"rgba(0,0,0,0)")
ctx.fillStyle=glass;
ctx.beginPath();
ctx.translate(100,0);
ctx.moveTo(100,100);
ctx.lineTo(187,150);
ctx.lineTo(137,237);
ctx.lineTo(50,187);
ctx.lineTo(100,100);
ctx.closePath;
ctx.fill();
ctx.stroke();
</script>
</html>

结果是: Image of Result

关于javascript - <canvas> 钻石/玻璃效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com