我想用透明背景在opengl中渲染字體。 主要問題是我的背景總是不透明的黑色!爲什麼glDrawpixels不渲染我的透明背景?
這裏是我的代碼:
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
font = ImageFont.truetype("/usr/share/fonts/truetype/wqy/wqy-microhei.ttc", 16)
textsize = font.getsize(u"當前運行列表")
im = Image.new("RGB",textsize,"#000")
draw = ImageDraw.Draw(im)
transparent_area = (0,0,im.size[0],im.size[1])
mask=Image.new('L', im.size, color=0)
drawmask = ImageDraw.Draw(mask)
drawmask.rectangle(transparent_area, fill=0)
im.putalpha(mask)
draw.text((0,0), u"當前運行列表", font=font, fill="red")
#im.save('render.png')
ix, iy, image = im.size[0], im.size[1], im.tostring("raw", "RGBA", 0, -1)
glDrawPixels(ix,iy,GL_RGBA,GL_UNSIGNED_BYTE,image)
這是視窗系統默認情況下是如何工作的。如果你想透明,你需要一個支持透明窗口的操作系統和WM(例如Windows&DWM/Aero),那麼你可以創建一個新的透明窗口,將OpenGL的東西渲染到幀緩衝區,將像素讀回RAM,將它們投射到窗口避免透明的像素。我不知道如何詳細地做這件事,實施起來可能會非常複雜,特別是如果您想要跨平臺支持的話。真的沒有其他的方法來做到這一點。 – 2012-02-02 11:11:10