2012-05-14 70 views
0

我有一个1024x1024背景纹理,并试图呈现一个100x100的精灵(也存储在纹理)到背景纹理的左下角。渲染一个半透明的雪碧纹理

我想呈现在50%不透明度的精灵。这需要在CPU中完成,而不是使用着色器的GPU完成。我发现的大多数例子都是使用着色器来实现的。

这样做的最好方法是什么?

回答

1

我想你是指从CPU端的opengl命令,因此使用固定功能(或固定管道)。我从“无着色器”请求中推断出这一点。 因为“在CPU上执行此操作”实际上意味着要执行纹理的检索/映射以便在CPU上访问它,像素上循环,并使用glTexImage将结果复制到图形卡或之后取消映射纹理。这最后一种方法将是非常低效的。 所以你只需要激活混合。

glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

并按顺序渲染:背景,然后在你的100x100图像之后有一个四边形。它会从你的100x100图像的alpha通道中进行混合。您可以从图像编辑工具将其设置为恒定的50%。

+0

你能不能也请指点我如何实际上可以在纹理上绘制雪碧呢? – Dex

+0

是的,用旧的opengl上下文,你可以做glTexImage2d来上传你的图像数据,然后glBindTexture,然后用四边形glBegin,调用4次glVertex2f和glTexCoord绘制四边形,然后glEnd。应该这样做。我确信nehe.net上有一些教程 – Lightness1024