1 我们可以在 Global 进行 alpha 测试吗?
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_EQUAL, 0.7);
使用这两个函数我们可以绘制纹理并显示 alpha >= 0.7 的图像。我的问题是,如果我绘制 2 个纹理,它们的某些部分重叠,它们的 alpha 总和为 0.7,如何显示这部分?
2 如何更高效地绘制位图
关于问题1,我在OpenGL中尝试了一些功能,并没有实现。所以我尝试另一种方式。我设置了一个map[512][512]
. 我首先在这张地图上绘制所有纹理并自己积累 alpha。如果像素 alpha >= 0.7,我将其设置为 color ,否则我将其设置为白色。最后,我将整个地图绘制为窗口的纹理。使用这种方法,我可以实现在全局进行 alpha 测试。但它非常非常慢。
(此方法来自 Stackoverflow 的 Bartek Banachewicz)
这是我的功能:
初始化
map[512][512]
全部设置为零在这张地图上画出所有的东西,并积累阿尔法
循环地图上的每个像素,根据那里的alpha设置它们的颜色
用于
glTexImage2D()
生成纹理(我认为这可能很慢)使用
glTexCoord2f
和glVertex3f
在窗口上绘制它。
使用这种方法,我画了大约 100 个东西,它变得非常慢(大约 20 FPS)
我可以做些什么来优化这个方法或取得其他成就吗?