stagegl出现锯齿的解决办法
先前我也写过一篇解决stagegl锯齿方法的博文,但是解决的不够彻底,图片旋转缩放还是会有锯齿。其实stagegl和canvas是有自带解决锯齿的api的,就是antialias,但是测试的时候发现stagegl中的antialias参数无效,今天研究源码的时候把无效的原因找到了。
他这里的isPOT因为false,所以导致了它走不到平滑的代码里,那他这个参数是干嘛的呢,看注释应该是用来保证数值是2的幂用,但是实际上不是2次幂也需要使用gl.LINEAR来平滑
var canvas,stage,bitmap,bitmap2 canvas = document.getElementById("canvas"); stage = new createjs.StageGL(canvas,{"antialias":true}); stage.setTextureParams = function (gl, isPOT) { if (this._antialias) { //non POT linear works in some devices, but performance is NOT good, investigate gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); } gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); }; // stage = new createjs.Stage(canvas); bitmap = new createjs.Bitmap("back.png"); stage.addChild(bitmap); bitmap2 = new createjs.Bitmap("back.png"); stage.addChild(bitmap2); bitmap2.x = 800; bitmap2.rotation = 45; createjs.Ticker.framerate = 30; createjs.Ticker.addEventListener("tick", stage);
大家可以看到,我重写了setTextureParams方法,使代码无需判断isPOT,这样就很简单的解决了问题。
demo:http://www.ajexoop.com/demo/stagegl-test/index.html
但是最后还是有个问题,如果是用cache后的矢量并且是有弧度的(比如圆),会出现一层黑边,那黑边怎么处理呢?看这篇文章:
发表评论