- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试渲染 3 种纹理,-背景- 黑/白前景 mask -前景
我用过这个OpenGL - mask with multiple textures因为它准确地描述了我的问题。但我无法让它工作。我只得到最后一个渲染器纹理,在这种情况下是前景。我调用 glutInitDisplayMode(GLUT_ALPHA);按照答案中的建议获得 Alpha 渲染。谁能从我这边发现错误?
我的代码如下:
double stretch = ((double)m_videoResY * (double)m_depthResX) / ((double)m_videoResX * (double)m_depthResY);
glEnable(GL_BLEND);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(+0.5, -0.5, +0.5, -0.5, 0.001f, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -0.5f);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBlendFunc(GL_ONE, GL_ZERO);
glBindTexture(GL_TEXTURE_2D, m_backgroundTexture);//Draw BGTexture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glBegin(GL_QUADS);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glEnd();
glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO);
//mask with userID
glBindTexture(GL_TEXTURE_2D, m_userIDTexture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBegin(GL_QUADS);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glTexCoord2f(1.0f, 1.0f * stretch);
glVertex3f(-0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 1.0f * stretch);
glVertex3f(0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glEnd();
//blend with Video of User
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
glBindTexture(GL_TEXTURE_2D, m_videoTexture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glBegin(GL_QUADS);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glEnd();
最佳答案
我想你的错误是:
当您使用 glBlendFunc(GL_ONE, GL_ZERO) 绘制背景时;作为结果,您通常在帧缓冲区中绘制它,但不提供所需的混合操作,在此过程中更有效的是根本不使用混合。因此,更有效的是 glDisable(GL_BLEND),但您的传递在这里会像您期望的那样工作。
第二遍你用 glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO);我不知道你为什么在这里使用如此复杂的函数并分别混合颜色和 alpha 值。所以,在第三遍中,我想你想通过你的前景黑/白颜色蒙版修改你的背景 alpha 值。如果是,则必须使用 glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_ZERO, GL_SRC_COLOR); - 是的,小错误。
在第三遍绘制前景时,你有 glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA),这意味着你想要绘制那些区域,其中你的黑白蒙版是白色的,并与衰减混合以获得更暗的蒙版区域。
如果您对 glBlendFunc 有任何疑问,我可以帮助您。
关于c++ - 通过 Alpha 混合的 OpenGL 掩蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322724/
我正在尝试弄清楚如何屏蔽相对路径上的路径。这是我为 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
我是一名优秀的程序员,十分优秀!