gpt4 book ai didi

windows - OpenGL 和(缺少)glBlendFuncSeparate

转载 作者:可可西里 更新时间:2023-11-01 10:25:35 24 4
gpt4 key购买 nike

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

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

我继续下载 GLEW
我将 glew.hglew.c 添加到我的 VS10 项目中,定义了 GLEW_BUILD 现在它终于可以编译而不会提示 glBlendFuncSeparate,但是当我运行该程序时,它在尝试调用该方法时崩溃,显示 Access Violation,我猜它指向 NULL,然后在运行时崩溃。

我继续阅读和搜索此内容,据我所知,我需要使用 OpenGl Extensions 才能使其正常工作。
如果写在Using OpenGL extensions On Windows是正确的那么我错过了一些东西。
假设我按照它说的做,我“为您的显卡下载并安装最新的驱动程序和SDK”,然后编译它,即使它在我的机器上运行,我也不能保证它不会在别人的机器上崩溃,因为他们可能没有这样做。

我有两个问题:

  1. 我是不是漏掉了什么?整个过程似乎太复杂了,并且依赖于环境。
  2. 在这种情况下是否有使用 glBlendFuncSeparate 的替代方法?

最佳答案

你不需要 glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO);使用 OpenGL - mask with multiple textures 中描述的技巧.是的,您不能将颜色直接添加到 alpha channel ,就像前面示例中所描述的那样,但是您可以稍微狡猾一些。

在编写你的蒙版时,只需禁用除 alpha 之外的所有颜色 channel :

glColorMask(false, false, false, true);

并在背景 alpha channel 上启用乘法 mask 的 alpha:

glBelndFunc(GL_ZERO, GL_SRC_ALPHA);

写完位掩码后,不要忘记重新设置 glColorMask。

glColorMask(true, true, true, true);

//-------------------------------------------- ---------------------------------------------- --------------------------

是的,您需要在 alpha channel 中包含信息的掩码:

1) 可以使用 GIMP 完成(非常简单,但需要 GIMP 知识)。

2) 您可以编写自己的 rootine,用于在创建蒙版纹理之前将颜色信息推送到 alpha channel (这非常简单 - 只需几行代码)。

3) 或者只使用 glTexImage2D 中的 GL_ALPHA“格式”属性作为 mask 纹理。此标志只是将位图颜色写入纹理 alpha channel 。

关于windows - OpenGL 和(缺少)glBlendFuncSeparate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19426921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com