问题标签 [glblendfunc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9704 浏览

opengl - glBlendFunc 和 alpha 混合

我正在编写一个应用程序,允许用户在不同的着色器及其组合之间切换。因此,我想多次绘制完全相同的场景。

最后,所有的pass都应该合并成一个输出。结合我想使用 glblendfunc 的所有通行证,但我没有得到我想要的结果。

在每个绘图调用中,我绘制一个具有 alpha 值的纹理,例如透明区域。我得到的最终结果是,我主要看到最后一个渲染通道的效果,但在边界(alpha 值略微下降的地方)我确实看到了第一个着色器效果。我确实认为我应该使用第二个 glBlendFunc 来混合两个通道,但我想不出一种不接触任何 alpha 值的方法,这会破坏预期的效果。

我应该怎么办?除了 alphablending 还有什么别的吗?

编辑:我的目标是结合一个或多个传球。我想混合颜色(很可能将它们加在一起),因为每个路径中的颜色是通过以下混合函数跨不同层计算的:glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)

编辑: 再次嗨!我正在解决这个问题,但我被卡住了。我不明白如何在任何着色器中正确设置 sampler2d ......我做错了什么?

0 投票
2 回答
3688 浏览

opengl - glBlendFunc 禁用着色器

我有一个非常简单的着色器(只是将背景正方形设置为绿色),并且效果很好。
我最近添加了一些应用了纹理的四边形。这个纹理有一些 alpha 值,所以我用它来调用它:

四边形显示良好的透明度 - 但背景中的着色器现在消失了。它仍在绘制中,但未显示。

现在我删除了两条 glBlendFunc(...) 行,着色器再次出现(但我失去了 alpha 混合)。但是,每当我调用该函数时,着色器似乎只是停止工作。

关于为什么会发生这种情况的任何想法?

删除了 glBlendFunc 的
glBlendFunc

图像: 使用了 glBlendFunc 的图像:
glBlendFunc 已移除

着色器加载代码:

垂直着色器(非常简单):

片段着色器:

0 投票
1 回答
1214 浏览

opengl - OpenGL:glTexEnvi、glBlendFunc 和屏幕文本消息

我正在开发一个电影播放器​​,我正在使用 OpenGL 来绘制帧和屏幕消息。

要绘制我使用的框架:

在绘制屏幕消息时,我绘制了一个矩形,其中包含我将要显示的文本的表示。为了处理透明度,我在绘制文本消息之前这样做:

我现在想提供实时修改亮度的选项。为了实现这一点,我正在使用:

亮度已正确修改,但现在短信错误。文本周围的矩形只有在亮度有其默认值时才透明,甚至文本也受到亮度校正的影响。(即文本默认为白色,当我降低亮度时它变得越来越灰)。

亮度调节是否会改变 0-1 之外的 alpha 光谱?我怎么解决这个问题?

如果这听起来很愚蠢,我很抱歉,但这是我第一次使用 OpenGL

0 投票
1 回答
513 浏览

glsl - WebGL 渲染缓冲区从着色器接收倾斜的像素值

我正在将多边形场景渲染到多个渲染目标,以便我可以执行后处理效果。但是,我在片段着色器中设置的值似乎并没有准确地反映在像素着色器中。

现在管道看起来像这样:

  • 将基本多边形(使用下面的简单着色器)渲染到中间缓冲区
  • 将缓冲区作为屏幕大小的四边形渲染到屏幕上。

我正在使用 WebGL Inspector (http://benvanik.github.com/WebGL-Inspector/) 查看中间缓冲区(使用 创建gl.createFrameBuffer())。

绘制多边形时,我有一个非常简单的片段着色器,如下所示:

这在我的抽奖电话之前:

我希望这会在缓冲区中创建一个值为 (255,0,0,128) 的像素,但实际上,它会创建一个值为 (255,0,0,64) 的像素 - 一半正如预期的那样。

这个程序相当大而且很复杂,所以如果答案不是很明显,我会用具体的细节更新帖子。

谢谢!

0 投票
0 回答
371 浏览

ios - cocos2d 中绘图应用程序的 Alpha 混合

我使用 cocos2d 创建一个简单的绘图应用程序,我在代码中创建了一个 32 位纹理,形状为我需要的画笔(圆形),具有简单的硬度梯度(中间的 alpha = 1,靠近边缘的 alpha = 0)纹理显然是方形的,所以 alpha 在圆外是 0。用户触摸屏幕进行绘制,并根据分离常数重复纹理。

我尝试在不启用 alpha 混合的情况下得到可怕的结果。

使用 (ccblendfunc){GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA} 我得到纹理的每个实例之间出现的边界。如果我通过点击而不是拖动手动创建每个点,则不会发生这种效果。

并且使用 (ccblendfunc){GL_SRC_ALPHA,GL_ONE} 我得到了很好的结果,但在边缘颜色被加在一起,蓝色和绿色 = 青色,红色和绿色 = 黄色和红色和蓝色 = 紫色

我怎样才能简单地创建一个像 Photoshop 标准一样工作的混合模式????

0 投票
1 回答
2250 浏览

webgl - WebGL blendFunc bug 还是误解?

我正在尝试在黑色背景上绘制一个半透明的黑色三角形。

在此处输入图像描述

这是我的示例:http ://codewithoutborders.com/posted/blend.html

blendFunc 已设置并启用(第 151 行):

缓冲区被清除为黑色(第 129 行):

着色器填充半透明黑色(第 10 行):

我希望三角形是黑色的,因为文档指出

哪个是黑色的,对吧?

那么灰色是从哪里来的呢?

0 投票
2 回答
572 浏览

objective-c - OpenGL ES混合功能,所以颜色总是在背景中显示

我正在使用 OpenGL ES 1.1 在我的 iPad 应用程序中画线。我想确保无论背景颜色如何,绘制的线条在屏幕上始终可见,并且不允许用户选择颜色。是否有混合功能可以产生这种效果?因此,所绘制线条的颜色将根据其下方已绘制的颜色而变化,因此始终可见。

0 投票
1 回答
329 浏览

java - 延迟渲染管道在笔记本电脑显卡上不起作用,以及奇怪的“模型重影”问题 (glBlendFunc)

编辑:更改片段着色器,以便每次运行只有一个光可以解决我的第一个问题。我的第二个问题仍然存在。

提前感谢您提供的任何帮助。几周以来,我一直在为我的 LWJGL 渲染引擎开发延迟着色管道。虽然我已经设法让一切都按预期工作,但是在将程序分发给我认识的几个人之后,我开始遇到问题。我会尽量保持简短。谢谢你和我在一起。

我将从标题中的两个问题中的第一个开始。在我的机器(AMD Phenom II 965 和 Nvidia GTX 480)上,渲染器的最终产品完全符合预期。(我打算发布一个图片的链接,但由于我是一个新用户,我无法发布超过 3 个超链接。但可以说,它看起来应该有。)

这正是我想要的,所以我虽然渲染器工作正常。我把它寄给了一个朋友(他正在使用 GT 440),他们得到了相同的结果。

此后不久,我将引擎的构建提供给了我的一位拥有笔记本电脑(使用 GT 540M)的朋友。这是渲染器产生的(忽略 FPS 计数器,它不起作用):

http://i.imgur.com/DxxFEpy.png

显然,这根本不是我预期的结果。我在能够测试的所有其他移动显卡上都体验到了相同的结果。经过一个多星期的头撞桌子后,我能够将问题缩小到调用 glBlendFunc 的照明通道。我的代码如下:

您可能会注意到的第一件事是我绘制了一个四边形,然后清除了深度和颜色缓冲区。这将在我的下一个问题中得到解决,尽管如果我下一个问题中的问题与这个问题中的问题密切相关,我不会感到惊讶。我几乎可以肯定 (99%) 问题出在这种方法上,因为在使用仅支持一盏灯但仍在使用延迟管道的较旧版本的引擎进行测试时,我能够在我测试的每台计算机上获得完美的结果. 再一次,渲染器适用于我测试过的每张台式机显卡,但不适用于任何笔记本电脑显卡。除了这种方法,我几乎排除了一切。可能值得注意的是,我没有成功使用内部格式不是GL_RGBA32fGL_RGBA16f作为渲染目标。有没有人见过这个,或者任何人都可以提供帮助?如果有人知道在这一点上从哪里开始寻找问题,我会很高兴,因为我什么都没有。我已经完全无法自己找到解决方案。

然后继续第二个问题和第二个问题。在最后一个代码块的开头,我有几行代码在屏幕上创建了一个没有着色器的四边形:

据我所知,这段代码应该什么都不做。但是当我删除四边形的绘图时,窗口会显示:

http://i.imgur.com/mkMsP0F.png

除了“重影”之外,我不知道还能称之为什么,因为它就像一个幽灵图像(至少在我看来是这样)。当我旋转 MV 矩阵时,它会在我旋转的方向上扭曲,第一组灯(我使用 7 个阵列)照亮它,但其余的照亮实际模型。我无法解释为什么会发生这种情况,因为生成此图像的代码与上面的代码完全一样,没有glCallList(quadList);这意味着深度和颜色缓冲区在我进入循环之前仍然被清除。我根本无法解释这个问题。有谁知道出了什么问题以及如何解决它,或者至少知道出了什么问题?

编辑我发现这只发生在具有纹理坐标的模型上。我不知道为什么。

编辑看起来当我将每个着色器中允许的灯光数量限制为 1 时,重影变得不那么明显,但仍然存在,所以我认为这意味着片段着色器的一次运行会导致这些重影。

感谢任何人对这两个问题的任何帮助,非常感谢。如果您有任何问题要问我,尽管我可能需要一些时间才能回复您,但我会尽快回复您。

编辑对不起,我忘记了我的着色器代码:GeometryPass 顶点:

GeometryPass 片段:

LightPass Phong 顶点:

LightPass Phong 片段

0 投票
1 回答
356 浏览

iphone - 如何做与刮掉图像效果相反的事情

我复制了这里找到的代码:

http://www.cocos2d-iphone.org/forum/topic/12557

为了创建一个成功的“刮掉”效果,即当我的burnsprite 访问顶层图像时,它在burnsprite 所在的位置使其透明,露出它下面的底层。

我想做相反的事情。我希望顶层从透明开始,并让它在 Burnsprite 访问的地方变得可见。

下面我列出了我尝试做的事情:

我将 Burnsprite 混合功能更改为{GL_ZERO, GL_ONE}. 我认为这是正确的做法。我不知道它是否有效,因为我的顶层开始时不是透明的。

我换 [topLayer clear:0.0f g:0.0f b:0.0f a:1.0f][topLayer clear:0.0f g:0.0f b:0.0f a:0.0f],什么也没发生。它不透明。

然后我做了topLayer.sprite.opacity = 0.0; 然后似乎只是部分透明。仍然不是我想要的。

请帮忙。

0 投票
1 回答
520 浏览

cocos2d-iphone - GL Func 减法 Cocos2d

有谁知道如何将 Cocos2d 2.x 中特定精灵的混合模式更改为 GL_FUNC_SUBTRACT?

我尝试了一些事情,但基本上我正在尝试使用白色(或黑色)圆圈创建图层蒙版并隐藏 alpha。