问题标签 [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 投票
2 回答
11616 浏览

android - 如何在 Open GL ES Android 上设置背景颜色

我现在在这里玩第08课

http://insanitydesign.com/wp/projects/nehe-android-ports/

我想将背景颜色从黑色更改为白色。为了在 onDrawFrame() 开始时执行此操作,我调用了

gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

这确实设置了一个白色背景屏幕,但也导致屏幕上没有其他内容!因此,显然这是一个不正确的方法,但为什么,以及如何解决它?!

提前谢谢了。

编辑(5天后):没人知道吗?!!

0 投票
1 回答
1718 浏览

graphics - DirectX alpha 混合(延迟渲染)

我有一个重大问题一直困扰着我一段时间。

我的问题是我的游戏使用了延迟渲染引擎,这使得进行 alpha 混合变得非常困难。

我能想到的解决这个问题的唯一方法是渲染场景(包括深度贴图、法线贴图和漫反射贴图)而没有任何具有 alpha 的对象。

然后对于每个具有带有 alpha 分量的纹理的多边形,禁用 z 缓冲区并将其渲染出来,包括法线、深度和颜色,并且只要 alpha 为“0”,就不会向深度、法线和颜色缓冲区输出任何内容。对这两个单独的纹理执行光照计算/其他延迟效果,然后使用深度图组合颜色缓冲区以检查哪个像素可见。

这个想法的成本非常高(更不用说有一些严重的缺点),这样做显然应该只为尽可能少的情况保留,这使得渲染森林区域成为不可能。但是,如果没有更好的解决方案,我有一个问题。

使用 directx 进行 alpha 混合时,是否可以设置着色器/设备状态,以便在需要时避免写入深度/法线/颜色缓冲区?问题是像素着色器必须输出到它指定的所有渲染目标,所以如果它设置为输出到 3 个渲染目标,它必须这样做,这将覆盖纹理中该纹素的先前颜色值。

如果没有允许我这样做的混合状态,这意味着我必须复制法线、纹理和深度贴图以保留场景,然后渲染到新的纹理、深度和法线贴图,然后根据阿尔法和深度值。

我想我真的只想知道是否有一种简单可靠且可能便宜的方法来在延迟渲染器中渲染 alpha?

0 投票
2 回答
3152 浏览

opengl-es - cocos2d-iphone setBlendFunc()

这是我的代码的样子

原来的纹理颜色是 (246,149,32) 现在的结果是 (0, 0, 0)

根据OpenGL,计算应该是这样的: ((246 * 1 + 0 * 1), (149 * 1 + 0 * 1), (32 * 1 + 0 * 1)) 所以应该是一样的。

不知道为什么我在这里做错了,有人可以帮助我吗?

问候,

0 投票
10 回答
28855 浏览

css - Are photoshop-like blend modes possible in HTML5?

I want to put a red rectangular <div> element over my webpage so that it would look not only transparent, but also like blended in Photoshop’s Multiply mode.

The <div> would have position: fixed, so the content below it would change quickly.

Is that possible with any HTML5 / CSS3 / canvas / SVG trick?

0 投票
1 回答
2030 浏览

webgl - 在 WebGl 中进行混合的正确方法

在 WebGL 中进行混合时,我遇到了一些问题。其中之一是在混合打开时无论 alpha 值如何渲染颜色的方式。这意味着较深的颜色总是与下面的颜色混合,即使 alpha 设置为 1.0。是的,更亮的颜色会根据 alpha 值呈现不同的颜色,所以我认为我设置着色器的方式没有问题。

再说一次,我还没有机会渲染一个完整的场景,我目前只使用 WebGl 进行测试,所以我只在默认背景上绘制简单的对象。一旦我使用对象渲染屏幕的每一位,这些混合问题是否会被“修复”,或者这是 WebGL 的限制?

0 投票
1 回答
1168 浏览

iphone - 将 CoreGraphics 混合模式映射到 Porter-Duff

我有一个 iPhone 应用程序,它UIImage通过 CoreGraphics 混合两个对象来进行图像处理,特别是CGContextSetBlendMode. 我目前正在研究将其移植到 Android 上。我已经完成了Bitmap使用 PorterDuff 模式在 Android 上组合对象的过程。但是,我想要更复杂的合成。例如,我kCGBlendModeHardLight用于许多混合:

根据源图像样本颜色,乘以或筛选颜色。如果源图像样本颜色浅于 50% 灰色,则背景变亮,类似于加网。如果源图像样本颜色比 50% 灰色深,则背景变暗,类似于相乘。如果源图像样本颜色等于 50% 灰度,则源图像不会更改。等于纯黑色或纯白色的图像样本会产生纯黑色或纯白色。整体效果类似于通过将强烈的聚光灯照射在源图像上所达到的效果。使用它为场景添加高光。

但是无论如何都不知道(如果可能的话)通过 Porter-Duff 来模拟这个。Android 是否不支持开箱即用的更好的图像处理算法?是否可以以某种方式使用 Porter-Duff 来模拟更高级的混合模式?

0 投票
1 回答
1011 浏览

opengl - 混合多个纹理以制作粒子系统

这是交易,我想制作一个基于纹理的粒子系统,并且我有一个云纹理。我将纹理映射到 10 个不同的多边形,每个多边形具有相同的大小和纹理。当我将它们相互混合时,就会出现问题,并且说 5 个多边形中的像素变得太白了!我不想要这个。我想要的是累积缓冲区的效果。我想采取这样的效果:

当页面中只有 1 个多边形且像素在其中时,说 Rx、Bx、Gx 是每个像素的颜色。现在我们有 n 个多边形,每个多边形都具有相同的大小和纹理。

Rtotal = R1/n+R2/n+...+Rn/n Gtotal 和 Btotal 相同

我该怎么做才能从 alpha 混合中获得这样的结果。

顺便说一句,这里是初始化。

0 投票
2 回答
12769 浏览

android - 混合来自两个位图的像素

我在这里撞墙了,我很确定我在做一些愚蠢的事情,所以是时候公开我的愚蠢了。

我正在尝试拍摄两张图像,使用标准混合算法(强光、柔光、叠加、乘法等)将它们混合成第三张图像。

因为 Android 没有内置这样的混合属性,所以我走上了获取每个像素并使用算法组合它们的路径。然而,结果是垃圾。下面是一个简单的乘法混合的结果(使用的图像和预期的结果)。

根据:替代文字

混合:替代文字

预期结果:替代文字

垃圾结果:替代文字

任何帮助,将不胜感激。下面是代码,我试图去掉所有的“垃圾”,但有些可能已经通过了。如果有不清楚的地方,我会清理它。

0 投票
1 回答
3904 浏览

opengl - openGL中的初学者透明度/不透明

我正在阅读 OpenGL 的 NeHe 教程...我在第 8 课(使用混合绘制立方体)。http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=08

我想尝试将一半的面更改为不透明的,以便始终有一个半透明的面与不透明的面相对,并且能够旋转立方体......

我稍微改变了代码,整个源代码都在那里: http: //pastebin.com/uzfSk2wB 我改变了一些东西:

  • 默认启用混合并将混合功能设置为 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  • 更改了为每个面绘制面和颜色的顺序。
    • 我设置了深度测试
    • 我画了所有不透明的脸
    • 我禁用深度测试
    • 我画出所有透明的脸

现在,很难确切地说出了什么问题,但它肯定看起来不正确,与透明的相比,我无法识别出哪些脸是不透明的,有时有些脸在应该绘制的时候似乎没有被绘制……等等。 ..

似乎计算正面与背面相比的面孔并非易事(尽管我确信可能),我希望有一种方法不需要这样做。

寻找我的代码中有什么问题,或者这是否不是首先做的正确方法。

0 投票
1 回答
564 浏览

c# - 关于“添加剂混合”和“色相替换”的问题

由于绘制字体在 CPU 方面非常昂贵,因此许多开发人员使用光栅化字体在视频游戏中绘制文本;这也是我所做的。

在绘制文本时使用附加混合在字形边缘方面效果很好,这些与背景颜色很好地融合在一起。

但它带来了另一个问题,

我决定实现一个“颜色”参数来绘制字体,而不是为每种颜色生成字形位图,否则内存使用可能很快就会成为问题;取决于需要多少字形和颜色以及字体大小,并且由于它支持 Unicode,因此可能需要数千个字形,具体取决于语言。

现在,当我混合时,在“红色”背景上说“绿色”字体,它变成“橙色”!这是添加剂混合的目的,但试图绕过这一点比预期的要复杂一些。显然,当背景为“黑色”时不会发生这种情况,但最终可能不是那种颜色。

如何将我的“白色”字体重新着色为“任何”颜色,同时仍保留对“任何”颜色的加法混合?

非常感谢 :D