[LayaAir3]关于drawToRenderTexture2D绘制后图像模糊问题补充

首先项目需要勾选视网膜画布模式
 通过重现DEMO发现是因为勾选了视网膜画布模式,原图是有缩放的,因为有视网膜模式原图虽然缩小了但清晰度依然很高,但通过drawToRenderTexture2D以后返回的纹理应该是没有享受到视网膜模式的清晰度,通过发现对比和没有勾线视网膜画布模式模糊程度相似
1.png
已邀请:

layabox

赞同来自:

查看了你的项目源码,这个问题,是由于你没有使用源图尺寸进行缩放导致。
 
首先,你的源图的宽高为80,这本身是高清的。你sp1绘制为宽高56,这本身也没什么问题。
 
问题在于,你通过 drawToRenderTexture2D 从sp1得到了一个56宽高 2D RT对象,这时候纹理宽高就是真的56,而不是80了。所以,当产生拉伸的时候,就会糊了。
 
所以3.3.2之前的版本,不要使用清晰度不高的RT对象。
 
考虑到你的项目需求,3.3.2开始,我们也为 drawToRenderTexture2D 增加了两个RT缩放的参数renderScaleX和renderScaleY。
/**
* @en Draws the current object to a RenderTexture2D object.
* @param canvasWidth The width of the canvas.
* @param canvasHeight The height of the canvas.
* @param offsetX The X-axis offset for drawing.
* @param offsetY The Y-axis offset for drawing.
* @param rt The render target.
* @param isDrawRenderRect A boolean indicating whether to draw the render rectangle. When true, it starts drawing from (0,0) of the render texture and subtracts the offset of the cache rectangle. When false, it keeps the sprite's original relative position for drawing.
* @param flipY Optional. If true, the texture will be flipped vertical. Default is false.
* @param clearColor Optional. If provided, the texture will be cleared to this color before drawing. Default is null.
* @returns The drawn RenderTexture2D object.
* @ZH 绘制当前对象到一个 Texture 对象上。
* @param canvasWidth 画布宽度。
* @param canvasHeight 画布高度。
* @param offsetX 绘制的 X 轴偏移量。
* @param offsetY 绘制的 Y 轴偏移量。
* @param rt 渲染目标。
* @param isDrawRenderRect 表示是否绘制渲染矩形。为 true 时,从渲染纹理的(0,0)点开始绘制,但要减去缓存矩形的偏移;为 false 时,保持精灵的原始相对位置进行绘制。
* @param flipY 可选。如果为 true,则垂直翻转纹理。默认为 false。
* @param clearColor 可选。如果提供,则在绘制前清除纹理为该颜色。默认为 null。
* @param renderScaleX 可选。渲染缩放 X。默认为 1。
* @param renderScaleY 可选。渲染缩放 Y。默认为 1。
* @returns 绘制的 RenderTexture2D 对象。
*/
drawToRenderTexture2D(canvasWidth: number, canvasHeight: number, offsetX: number, offsetY: number, rt?: RenderTexture2D, isDrawRenderRect?: boolean, flipY?: boolean, clearColor?: Color, renderScaleX?: number, renderScaleY?: number): RenderTexture2D;


 有了这两个参数后,3.3.2版本的使用示例如下(基于你DEMO的test方法)
private test(): void {
let t = this.sp1.drawToRenderTexture2D(80, 80, 0, 0, null, true, true, null, 80/56, 80/56);
let t2 = new Laya.Sprite();
Laya.stage.addChild(t2);
let Texture = Laya.Texture.create(t, 0, 0, t.width, t.height);
t2.graphics.drawImage(Texture, 0, 0, 56, 56);
}

LayaAir大为

赞同来自: 肖亮亮

您好,我们已经复现这个问题,感谢您的反馈

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

商务合作
商务合作