【发布时间】:2021-01-14 17:28:38
【问题描述】:
我有一个透明的图标图。 256x256
我使用这张图片创建了一个纹理。
AddIconMap(imageUrl) {
const image = new Image()
const { gl } = this
image.onload = () => {
const iconMapTexture = gl.createTexture()
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false)
gl.bindTexture(gl.TEXTURE_2D, iconMapTexture)
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image)
gl.generateMipmap(gl.TEXTURE_2D)
gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR)
gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)
this.mapTexture.push(iconMapTexture)
window.URL.revokeObjectURL(image.src)
}
image.crossOrigin = ''
image.src = imageUrl
}
然后,我想在此纹理中获取最后一个小图标并将其绘制在画布上。画布的高度和宽度为 256px。每个small的高宽都是32px。
var frameBuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.Sphere.mapTexture[0], 0)
const pixel = new Uint8Array(4 * 32 * 32)
gl.readPixels(224, 224, 32, 32, gl.RGBA, gl.UNSIGNED_BYTE, pixel)
var imageData = this.ctx.createImageData(32, 32)
imageData.data.set(pixel)
this.ctx.putImageData(imageData, offset.x, offset.y, 0, 0, 32, 32)
我在画布上绘制了图标,但图标不透明。我想,也获取背景图片的像素,但我不想要这个。
有什么想法吗?我该怎么办?
【问题讨论】:
标签: webgl textures framebuffer