问题
最近在做一个展示spine动画的html5页面,使用了WebGL渲染器,但渲染出的画面锯齿严重,如图:
原因
webgl使用canvas绘图,canvas绘制的图片宽高可能和其本身宽高不一样,如果设置style="width: 100%;height: 100%;"的话,容器宽高还会动态变化,但绘制的图片宽高不会跟着变化。而css会把图片强行拉伸到容器的宽高,因此产生严重的锯齿现象。
解决方法
改变canvas绘制的图片大小:
<canvas width="?px" height="?px">
改变canvas容器的大小:
<canvas style="width: ?px;height: ?px;">
改改webgl的代码,本质上就是让canvas绘制的图片像素数量翻了几倍,来提高清晰度,因此如果动画变卡了,可以设置成一定宽度以下生效:
let w = canvas.clientWidth;
let h = canvas.clientHeight;
let DPR = window.devicePixelRatio;// 设备像素比
if (DPR) {
canvas.width = w * DPR;
canvas.height = h * DPR;
let ctx = canvas.getContext("2d");
if (ctx)
ctx.scale(DPR, DPR);
}
this.context.gl.viewport(0, 0, w, h);
成果
看上去顺眼很多啦~