问题标签 [blending]

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 投票
1 回答
3645 浏览

directx - 如何在 DirectX 上启用 Alpha 混合?

如何在 DirectX 中做到这一点?

不知何故,我似乎无法让它工作。我使用代码:

但它会用某种幻影方法渲染我的多边形,我可以看穿我所有的多边形!我只想制作带有 alpha 通道的纹理,以显示那些完全透明的纹理。这适用于 alphatest,但它仍然显示黑色边缘,所以我猜混合没有启用,即使我设置了 D3DRS_ALPHABLENDENABLE !我做错了什么?

0 投票
1 回答
209 浏览

java - 混合复合材料..请解释一下

我试图弄清楚 Romain Guy 在他的混合复合材料BlendingComposite--Romain Guy 中做了什么。这是我知道的,至少我是这么认为的。

  1. 图像将其信息保存在颜色数组中(每个像素的信息)
  2. 混合采用这些像素并使用算法将它们组合以创建最终像素。

我很困惑如何获取这些图像的像素数组然后使用它们?

然后如何创建混合复合材料?

感谢您的帮助和时间。

0 投票
0 回答
562 浏览

android - 混合在 Desire HD 和 A500 选项卡上无法正常工作

我正在使用 libgdx 以及 gdxlw 制作动态壁纸,gdxlw 是 libgdx 之上的一个小框架,可以更轻松地使用 OpenGL 制作动态壁纸。

首先,我确保我没有使用 GL20。我希望尽量保持 GL10/GL11。我正在使用一个简单的 OrthographicCamera。

我每次渲染调用做什么:

1...使用

gl11.glClearColor(1, 1, 1, 1);

gl11.glClear(GL11.GL_COLOR_BUFFER_BIT);

我用白色填充屏幕。

2...我在上面画了一个黑色方块,使用 SpriteBatch 和

batch.setBlendFunction(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

3...在此之上,我使用 SpriteBatch 和

batch.setBlendFunction(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_DST_COLOR);

然后只会在已经是黑色的地方绘制大图像,而不是在白色的地方。它按我的预期工作,非常适合我的项目。

这在我的 HTC Desire HD (Android 2.3.5) 上完美运行。然而,当我在我的 Acer Iconia A500 平板电脑(Android 3.2.1)上运行相同的应用程序时,大图像被绘制在黑色和白色背景上而没有混合。

无论我在绘制大图像时尝试将混合更改为什么,结果总是相同的。黑色方块是不可见的,它应该是。大图像只是在它上面推土机。

我可能做错了什么?我会错过什么吗?

需要注意的一件有趣的事情是,我尝试在使用各种混合绘制的大图像上(之后)绘制一些随机精灵,这证明了不同类型的混合实际上似乎确实有效。换句话说,混合并没有完全禁用。

混合时大图像的行为是否与小图像不同?

另一个需要注意的有趣的事情是,当我对大图像使用线性过滤时,您实际上可以非常模糊地辨认出黑色方块。但是,它在最近过滤时不可见。

请原谅我困惑的问题;我现在唯一想到的是“为什么会发生这种情况?” 我整天都在拉头发,尝试了很多方法,但都没有成功。

libgdx 是否与平板电脑或 Android 3+ 不兼容?我找不到任何参考。

gdxlw罪魁祸首吗?

编辑:我做了一些测试,发现如果我将应用程序更改为使用 GL20 而不是 GL11,我在我的 Desire HD 上得到的结果与我的 Acer Iconia A500 相同。也就是说,我看到了我的大图像,并且非常(!)模糊地看到了它背后的黑色。

另外,我正在查看我在 Acer Iconia A500 平板电脑上运行 GL11 版本的 logcat。它指出...

...在我看来,这听起来像是在使用 OpenGL ES 1.1。我找不到有关“CM”代表什么的信息。但是,从我的 Desire HD 中查看我的logcat,运行相同的应用程序版本:

...它声明它使用与我的平板电脑相同的 OpenGL 版本。

如果两者是相同的版本,两个实现不应该同样工作吗?

硬件,一个是 Nvidia Tegra,另一个是 Qualcomm,会有所作为吗?

在 Tegra 设备上,OpenGL 1.1 是否以某种方式“模拟”,而且不完美?

我也确实看到“OGL 扩展”列表有所不同。例如,搜索任何包含“混合”的东西,我发现GL_OES_blend_equation_separate,在我的 Desire HD 上,GL_OES_blend_func_separateGL_OES_blend_subtract在我的 A500 上,我找不到任何我能分辨的东西。

如果问题在于这些扩展,我该如何(如果可能)解决这个问题?

编辑:好的,所以现在我让它按照我想要的方式工作,但我只使用 GL20。但是,如果可能的话,我仍然想使用 GL10 或 GL11 解决问题,因为我希望更多设备能够运行该应用程序。

0 投票
1 回答
301 浏览

mfc - Windows 移动 (MFC)。如何将具有 alpha 通道的图像从 CImageList 转换为 CBitmap?

我已将 CBitmapButton 子类化,以创建我自己的带有重写函数 DrawItem 的按钮。这是其中的代码,它可以工作:

问题是所有图像都已加载并存储在 CImageList 中。而且我不知道如何转换它们。

CImageList 创建中可能有问题: m_LargeImg.Create(365, 85, ILC_COLOR32, 4, 0);

0 投票
0 回答
542 浏览

graphics - 离屏阿尔法混合

以下问题有什么解决办法吗?我有两个源图像,它们的大小相同,并且都存储为 ARGB 像素的简单内存数组,每个像素 32 位(每个颜色分量 8 位,alpha 通道(透明度)信息 8 位)。

案例 1:我正在将这两个图像(使用 alpha 混合)绘制到目标图像。我首先绘制图像#1,然后绘制图像#2。

案例2:我现在想要实现的是:我不想将图像#1和图像#2一个接一个地绘制到目标图像,而是创建一个新的临时图像,图像#3,它是图像的组合#1和图像#2。将图像#3 绘制到目标图像应产生与上述案例 1 中执行的操作完全相同的结果。

这有可能吗?即,从图像#1 和#2 创建一个中间图像——当绘制到目标图像时——将产生与图像#1 和#2 一个接一个地被绘制到目标图像一样的结果?如果可能,我需要什么算法?如果无法进行精确复制,有没有办法近似这个操作?

谢谢

编辑:为了让这一点更清楚一点:我正在开发一种特殊的硬件设置,其中 alphablending 到显示器非常昂贵。这就是为什么我想把它组合成尽可能少的调用。在案例 1 中,我必须进行两次 alpha 混合:首先将图像 #1 混合到目标表面,然后将图像 #2 混合到目标表面。在我的特定硬件设置上,这是非常昂贵的。这就是为什么我想先创建中间图像#3,然后将图像#3 混合到目标表面。这样,我只需调用一次昂贵的混合程序。所以我的问题是,是否有可能以某种方式从图像#1 和#2 创建这个图像#3,以使结果看起来完全相同。

0 投票
1 回答
538 浏览

opengl - 我可以设置一个自定义函数来改变 OpenGL 中显示列表的颜色吗?

我将几何图形存储在显示列表中,但我希望能够绘制具有不同“色调”的相同显示列表。例如,如果我在显示列表中有一个黑白头骨,我想设置一个红色色调并绘制一个头骨,然后设置一个蓝色色调并绘制头骨。

如果我能得到 RGBA 值,我就知道如何转换它们,但我不确定在哪里可以截取它们。目前显示列表不包含纹理,但它们可能会在未来出现,所以如果答案在有或没有纹理的情况下工作会很好。

0 投票
1 回答
754 浏览

iphone - glBlendFuncSeparate 在 iOS 上更透明

我正在使用

并使用绘制此帧缓冲区

在使用 OpenGL 的 Mac、Window 和 Linux 上一切正常,但在使用 OpenGL ES 的 iOS 上,生成的帧缓冲区更加透明。

我可能做错了什么,我该如何解决?

0 投票
1 回答
1577 浏览

android - libGDX: treat first color in palette as transparent color

old game engines designate the first color of an image's palette as a transparent color. is there a way to do the same with libGDX?

i tried loading the picture and replacing the palete's first color with 0x00000000. however since the pixels are either opaque or transparent i dont need alpha values so i could save a lot of memory by using RGB888 instead of RGBA8888. i lookes through the gdx and opengl documentary for other blending options and found Gdx.gl20.glBlendColor and the SpriteBatch's setBlendFunction function. but they only change the values used in the blending equations.

thanks in advance :)

0 投票
1 回答
416 浏览

c# - 我如何混合这样的颜色?

我正在编写一个工具来帮助将新角色改装到游戏十字军之王 II 中,但我有点坚持给头发和胡须上色。

游戏以这样的纹理开始:


(来源:serayen.com

然后将其与三种颜色混合——阴影、底色和高光,例如:

  • 黑暗:10、10、10
  • 基数:125、85、56
  • 亮点:255、255、255

结果是:


(来源:serayen.com

它使用什么样的混合方式?我将如何在 C# 中进行操作?

0 投票
4 回答
7971 浏览

android - OpenGL透明图像中有黑色

我正在开发一款适用于 Android 的游戏,我想知道为什么每当我绘制透明图像时,透明部分似乎总是添加一些黑色。这一切都发生了,让我的一些效果看起来很奇怪。

这是一个例子。这两个圆圈只是带有模糊的白色图像,但是当一个与另一个重叠时,您可以看到它有阴影。如果我在 Inkscape 中重叠两个圆圈,我会在它们重叠的地方得到纯白色。

在此处输入图像描述

我在用

为我的混合。

知道为什么会发生这种情况以及如何避免它吗?

编辑:我唯一能想到的是这两个图像具有相同的 z 所以也许它们只与背景混合而不是相互混合?

编辑:我改变了

这是我正在寻找的结果。

在此处输入图像描述

现在唯一的事情是我拥有的透明黑色的透明图像被忽略了,这是有道理的,因为我认为目标 alpha 是 1。为什么一个减源会添加那个灰色?