- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 OpenGL/GLSL 实现一个绘图应用程序。有一个功能,用户可以使用带有图案图像的画笔绘制“蒙版”,同时背景会根据画笔的位置而变化。看看视频就明白了:video
我使用 CALayer 的蒙版(iOS 的东西)来实现这个效果(在视频中)。但是这种实现非常昂贵,fps 非常低。所以我决定为此使用 OpenGL。对于 OpenGL 实现,我使用 Stencil 缓冲区进行屏蔽,即:
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 0);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
// Draw mask (brush pattern)
glStencilFunc(GL_EQUAL, 1, 255);
// Draw gradient background
// Display the buffer
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
问题:Stencil 缓冲区不适用于 alpha,这就是我不能为画笔使用半透明图案的原因。
问题:如何使用 OpenGL/GLSL 但不使用 Stencil buffer 从视频中获得这种效果?
最佳答案
由于您的背景已经生成(来自评论),因此您可以简单地在着色器中使用 2 个纹理来绘制每个片段。您将需要重新绘制所有这些,直到用户抬起手指为止。
所以假设您有一个纹理,上面有一个带有 alpha channel footprintTextureID
的白色足迹和一个背景纹理“backgroundTextureID”。您需要使用 activeTexture
1 和 2 绑定(bind)两个纹理,并将 2 作为制服传递到着色器中。
现在在您的顶点着色器中,您需要从该位置生成相对纹理坐标。应该有一行类似于 gl_Position = computedPosition;
所以你需要添加另一个 varying
值:
backgroundTextureCoordinates = vec2((computedPosition.x+1.0)*0.5, (computedPosition.y+1.0)*0.5);
或者如果你需要垂直翻转
backgroundTextureCoordinates = vec2((computedPosition.x+1.0)*0.5, (-computedPosition.y+1.0)*0.5):
(这个等式的原因是输出顶点在区间 [-1,1]
但纹理使用 [0,1]
: [-1,1]+1 = [0,2]
然后 [0,2]*0.5 = [0,1]
).
好的,假设您正确绑定(bind)了所有这些,您现在只需要在片段着色器中乘以颜色即可获得混合颜色:
uniform sampler2D footprintTexture;
varying lowp vec2 footprintTextureCoordinate;
uniform sampler2D backgroundTexture;
varying lowp vec2 backgroundTextureCoordinates;
void main() {
lowp vec4 footprintColor = texture2D(footprintTexture, footprintTextureCoordinate);
lowp vec4 backgroundColor = texture2D(backgroundTexture, backgroundTextureCoordinates);
gl_FragColor = footprintColor*backgroundColor;
}
如果您愿意,可以乘以足迹中的 alpha 值,但这只会失去灵 active 。在足迹纹理为白色之前,它没有任何区别,因此这是您的选择。
关于ios - OpenGL/GLSE alpha 掩蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876884/
我正在尝试弄清楚如何屏蔽相对路径上的路径。这是我为 CSS 文件实现的自定义缩小器脚本,需要绝对相对路径。 假设我在 CSS 文件中有以下内容 url('../images/file.jpg') 这个
我正在尝试在我的 WordPress 图片/帖子中创建以下内容。 我也需要它具有响应能力,所以我使用了 Bootstrap 3 和背景图片。 帖子的代码片段: Titl
在考虑如何优化方面,我仍然是一个成熟的人。我有这部分代码,它接受已找到的峰的列表,并找到这些峰,+/- 某个值,位于多维数组中的位置。然后它将 +1 添加到它们的 zeros 数组的索引中。代码运行良
我正在使用 DirectX 9 开发游戏。这是我正在尝试做的事情: 渲染场景后,我想在它上面渲染一些 Sprite :整个场景上的黑色覆盖物和一些 Sprite ,它们是显示覆盖物应该有孔的蒙版。到目
有一个丰富的 UI 应用程序,我想在其中显示像这样复杂形状的图像 现在我想要的是根据蒙版图像裁剪我的图像,实际上 图像是动态的,可以从相机或图库(正方形或矩形形状)导入,我希望该图像适合在我上面的布局
我试图在谷歌地图应用程序上应用聚光灯效果。具体来说,我画了一个跟随鼠标的圆圈,并将其设置为 map 上的 mask 。问题是只显示了圆圈内的 map 区域,我知道它应该是面具的样子,但是有没有办法让圆
我正在使用 OpenGL/GLSL 实现一个绘图应用程序。有一个功能,用户可以使用带有图案图像的画笔绘制“蒙版”,同时背景会根据画笔的位置而变化。看看视频就明白了:video 我使用 CALayer
我正在尝试使用 HTML 和 CSS 创建一个“眨眼”动画。 我想要的是,当眼睛眨眼时,眼球不显示。 从代码中可以看出,眼睛由 4 个元素组成。 Div“眼睛”是眼睛所在的容器。 划分“eye1”和“
我正在尝试渲染 3 种纹理,-背景- 黑/白前景 mask -前景 我用过这个OpenGL - mask with multiple textures因为它准确地描述了我的问题。但我无法让它工作。我只
我正在尝试使用具有不同时间长度的序列在 Keras 中拟合 RNN。我的数据位于格式为 (sample, time, feature) = (20631, max_time, 24) 的 Numpy
所以,我想屏蔽 SparseTensor 的整行。使用 tf.boolean_mask 很容易做到这一点,但没有与 SparseTensor 等效的方法。目前,我可以只遍历 SparseTensor.
我正在尝试快速屏蔽图像。这是我的代码: (通常,originalImg 是从 UIImagePickerController 加载的图像,然后由 UIGraphicsGetImageFromCurre
我正在尝试使用 System.Drawing.Graphics 使用源 Bitmap 和 alpha 掩码 Bitmap 绘制图像目的。目前我循环 X 和 Y 并使用 GetPixel 和 SetPi
我是一名优秀的程序员,十分优秀!