2

我需要将一些图像混合成一个图像,就像这里描述的那样:OpenGL - mask with multiple textures
我使用了那里提出的解决方案,但是该glBlendFuncSeparate方法存在问题。

原来这个方法是在后来的openGL版本中引入的,根据我的gl.h文件,我正在使用的版本是1。
经过大量搜索和阅读,我意识到这是我必须使用的,我不能只升级我的openGL版本。

我继续下载GLEW。我在我的 VS10 项目中
添加glew.h并定义,现在它最终编译而没有抱怨,但是当我运行程序时它在尝试调用该方法时崩溃,说,我猜它指向 NULL,然后在运行时崩溃.glew.cGLEW_BUILDglBlendFuncSeparateAccess Violation

我继续阅读和搜索,据我了解,我需要使用 OpenGL 扩展来使其工作。
如果在 Windows 上使用 OpenGL 扩展中所写的内容是正确的,那么我错过了一些东西。
假设我做了它所说的一切,我“为你的显卡下载并安装最新的驱动程序和 SDK”然后编译它,即使它在我的机器上运行,我也不能保证它不会在别人的机器上崩溃,因为他们可能没有做同样的事情。

我有两个问题:

  1. 我在这里错过了什么吗?这整个过程似乎太复杂了,而且依赖于环境。
  2. glBlendFuncSeparate在这种情况下是否有替代方案?
4

1 回答 1

2

你不需要 glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO); 使用OpenGL 中描述的技巧 - 具有多个纹理的掩码。是的,您不能像前面的示例中描述的那样直接将颜色添加到 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) 或者只是使用 glTexImage2D 中的 GL_ALPHA“格式”属性作为蒙版纹理。此标志仅将位图颜色写入纹理 Alpha 通道。

于 2014-10-30T13:17:22.383 回答