[LayaAir 2.0]通过绘制纹理生成的图片,改变scale时会出现图片不绘制的情况

demo项目里Main.ts下的onConfigLoaded方法里,使用Texture2D.setPixels创建了纹理,Sprite通过绘制纹理graphics.drawTexture的方式生成可视化图片,但这个Sprite在改变大小时会出现绘制失败的情况,demo里scale在0.7及更小的情况下就不再绘制,即图片不可见,具体代码如下:
            let sp = new Laya.Sprite;
            sp.size(nImageWidth, nImageHeight);
            let b = new Laya.Texture2D(nImageWidth, nImageHeight);
            b.setPixels(data);
            sp.graphics.drawTexture(new Laya.Texture(b));
            Laya.stage.addChild(sp);
            let _picScale:number=1;
            //每点一下就缩小0.05倍
            Laya.stage.on(Laya.Event.MOUSE_DOWN,this,()=>{
                _picScale-=0.05;
                sp.scale(_picScale,_picScale);
                //缩小到0.7倍时,图片就不见了
                console.log("图片放大倍数:"+_picScale)
            })
已邀请:

kylin9718

赞同来自: 180*****056

1) 我们使用纹理时使用了 MIPMAP 映射,即
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
2) 但你使用 setPixels 时,并没有显式的设置mipmap层级 (setPixels的第二个参数)
3) 所以当缩放到.7左右时,读取第二层级的图片,但因为你没有设置mipmap层级,导致其他层级全是黑色,结果就显示黑色了。
4.1) 建议不要使用 setPixels 方法,或者手动设置mipmap层级。
4.2) 或者手动改我们的引擎,将
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
改为
gl.texParameteri(this._glTextureType, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
 
 
 

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作