我在WebGL中渲染图像时遇到了问题:我有一个画布,上面有一个占据整个画布的四边形和一张纹理贴图(我已经设置了正确的纹理坐标),这张图片是一个包含RGB数据(按照此顺序)的Uint8array数组,尺寸为1024*768像素,我有正确的缓冲区。这是链接: https://istack.dev59.com/DrWGL.webp。
问题是:当渲染到WebGL中时,我的图片变得模糊和不清晰,即使我有一个与图像大小相同的画布。请看下面的结果: https://istack.dev59.com/k3rhr.webp。
现在是代码部分:以下是我用来创建纹理句柄的代码:
数据按以下方式加载到纹理中:
我尝试了很多选项,从过滤到设置样式选项image-rendering pixelated,将图像转换为RGBA并给出RGBA值,结果始终是相同的糟糕纹理渲染。看起来WebGL没有正确地插值数据,即使画布与纹理大小完全相同。
有人有提示吗?
提前致谢。
问题是:当渲染到WebGL中时,我的图片变得模糊和不清晰,即使我有一个与图像大小相同的画布。请看下面的结果: https://istack.dev59.com/k3rhr.webp。
现在是代码部分:以下是我用来创建纹理句柄的代码:
//texture
that.Texture = that.gl.createTexture();
that.gl.bindTexture(that.gl.TEXTURE_2D, that.Texture);
// Set the parameters so we can render any size image.
that.gl.texParameteri(that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_S, that.gl.CLAMP_TO_EDGE);
that.gl.texParameteri(that.gl.TEXTURE_2D, that.gl.TEXTURE_WRAP_T, that.gl.CLAMP_TO_EDGE);
that.gl.texParameteri(that.gl.TEXTURE_2D, that.gl.TEXTURE_MIN_FILTER, that.gl.NEAREST);
that.gl.texParameteri(that.gl.TEXTURE_2D, that.gl.TEXTURE_MAG_FILTER, that.gl.NEAREST);
数据按以下方式加载到纹理中:
this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGB, this.m_iImageWidth, this.m_iImageHeight,
0, this.gl.RGB, this.gl.UNSIGNED_BYTE, this.m_aImage);
最后,这是我使用的片段着色器:
precision mediump float;
uniform sampler2D u_image;
varying vec2 v_texCoord;
void main()
{
gl_FragColor = texture2D(u_image, v_texCoord);
}
我尝试了很多选项,从过滤到设置样式选项image-rendering pixelated,将图像转换为RGBA并给出RGBA值,结果始终是相同的糟糕纹理渲染。看起来WebGL没有正确地插值数据,即使画布与纹理大小完全相同。
有人有提示吗?
提前致谢。
gl.NEAREST
。如果图像与画布分辨率不匹配,则gl.LINEAR
会在一定程度上提高质量,或者对图像进行Mip映射,或使用TEXTURE_MAX_ANISOTROPY_EXT扩展。 - Blindman67