如何解决为什么PNG的透明度无法正确显示?
我正在为SDL和OpenGL使用Go绑定。 这就是我加载纹理的方式:
func (sprite *Sprite) loadImage(name string) {
surf,err := img.Load(name)
if err != nil {
panic(err)
}
sprite.width = surf.W
sprite.height = surf.H
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1,&sprite.tex)
gl.BindTexture(gl.TEXTURE_2D,sprite.tex)
gl.TexImage2D(gl.TEXTURE_2D,gl.RGBA8,surf.W,surf.H,gl.RGBA,gl.UNSIGNED_BYTE,surf.Data())
gl.BindTexture(gl.TEXTURE_2D,0)
gl.GenFramebuffers(1,&sprite.framebuffer)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,sprite.framebuffer)
gl.FramebufferTexture2D(gl.READ_FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,sprite.tex,0)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,0)
}
我用以下方法绘制它:
func (sprite *Sprite) draw() {
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,sprite.framebuffer)
gl.BlitFramebuffer(0,int32(sprite.width),int32(sprite.height),100,gl.COLOR_BUFFER_BIT,gl.LINEAR)
gl.BindFramebuffer(gl.READ_FRAMEBUFFER,0)
gl.Disable(gl.BLEND)
}
绘制循环:
for running {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
running = false
break
}
}
gl.ClearColor(0.3,1.0,0.3,1.0)
gl.Clear(gl.COLOR_BUFFER_BIT)
sp.draw()
window.GLSwap()
}
它可以正常工作,但是OpenGL似乎没有考虑Alpha-Channel。纹理的透明部分被绘制为黑色:
那我该如何使透明度起作用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。