我需要将一些图像混合成一个图像,就像这里描述的那样:OpenGL - mask with multiple textures。
我使用了那里提出的解决方案,但glBlendFuncSeparate
方法存在问题。
原来这个方法是在以后的openGL版本中引入的,根据我的gl.h
文件,我使用的版本是1.
经过大量的搜索和阅读后,我意识到这是我必须使用的,我不能只升级我的openGL版本。
我继续下载GLEW
我将glew.h
和glew.c
添加到我的VS10项目中,定义了GLEW_BUILD
,现在最终编译时没有抱怨glBlendFuncSeparate
,但是当我运行程序时它会在尝试时崩溃调用方法,说Access Violation
,我猜它指向NULL,然后在运行时崩溃。
我继续阅读并搜索此内容,根据我的理解,我需要使用OpenGl Extensions才能使其正常工作。
如果Using OpenGL extensions On Windows中的内容是正确的,那么我就会遗漏一些东西
让我说我做了它所说的一切,我“为你的显卡下载并安装最新的驱动程序和SDK”,然后编译它,即使它在我的机器上运行,我看不能保证它不会在别人的机器上崩溃,因为他们可能没有做同样的事情。
我有两个问题:
glBlendFuncSeparate
的替代方案?答案 0 :(得分:2)
您不需要glBlendFuncSeparate(GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ZERO);使用OpenGL - mask with multiple textures中描述的技巧。是的,您无法直接将颜色添加到Alpha通道中,如前面示例中所述,但您可能会有点棘手。
在编写掩码时,只需禁用所有颜色通道的写入,但alpha:
除外 glColorMask(false, false, false, true);
并在背景alpha通道上启用倍增遮罩的alpha:
glBelndFunc(GL_ZERO, GL_SRC_ALPHA);
编写位掩码后,不要忘记设置glColorMask。
glColorMask(true, true, true, true);
// --------------------------------------------- -------------------------------------------------- ------------------------
是的,您需要使用Alpha通道中的信息进行掩码:
1)可以使用GIMP完成(非常简单,但需要GIMP知识)。
2)你可以编写自己的rootine,用于在创建蒙版纹理之前将颜色信息推送到alpha通道(它非常简单 - 只需几行代码)。
3)或者只使用GL_ALPHA"格式" glTexImage2D中的属性用于蒙版纹理。此标志只是将位图颜色写入纹理alpha通道。