问题标签 [stencil-buffer]

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 回答
1479 浏览

ios - OpenGL ES 2.0 - GL_POINTS 和模板缓冲区

我正在尝试通过应用模板缓冲区使用 GL_POINTS 在 OpenGL ES 2.0 中绘制纹理。模板缓冲区应该来自纹理。我将结果渲染到另一个纹理,然后将纹理呈现到屏幕上。这是我渲染到纹理的代码:

我得到的结果只是我的纹理被绘制而没有从模板上应用任何遮罩。关于这个问题我有几个问题:

  1. 是否可以使用带有 GL_POINTS 的模板缓冲区?
  2. 渲染到纹理时是否可以使用模板缓冲区?
  3. 模板纹理是否必须具有任何特殊属性(纯色、内部格式...等)?
  4. 我的代码有任何明显的错误吗?

这是我正在寻找的结果: 在此处输入图像描述

更新:

正如所选答案所指出的,我的问题主要是我没有将模板附加到 FBO 的模板附件上:

我不知道渲染到纹理时需要它。其次,我没有使用正确的模板测试。

做了工作。

0 投票
1 回答
1749 浏览

c++ - OpenGL:清除模板缓冲区,除了某些位?

我将模板缓冲区用于两项工作。第一个是允许掩蔽发生,第二个是为可以“看到”的对象编写掩码。在这种特殊情况下,保留位是0x80字节中的最后一位,其余位用于常规屏蔽。

第一个目的要求缓冲区在大约 127 次使用后被清除,否则过去的模板将在测试时再次变为“有效”,因为该值必须回滚为 1。第二个目的要求缓冲区中的保留位保持活动状态整个框架。

有没有办法清除整个模板缓冲区,同时保持保留位设置?

0 投票
1 回答
1297 浏览

directx-11 - 如何为模板 DirectX 11 设置轮廓

我对 DirectX 和图形编码很陌生。我正在使用 SlimDX 进行实施。我正在绘制一张地图,显示特定区域的数据的可视化表示。我要做的就是采用状态形状,如果像素在该区域内,则绘制它,否则不绘制。这基本上就是模板,对吧?但我无法弄清楚我应该如何为模板缓冲区设置该多边形。或者这不是模板缓冲区的用途?

0 投票
0 回答
3243 浏览

unity3d - 使用模板缓冲区制作窗口

我想在不同的墙壁上创建窗户,我希望它是动态的,所以我不想改变墙壁的几何形状,因为我希望能够移动窗户。所以我想使用模板着色器。我是着色器的新手,但我已经发现了一些东西,我想出了这个:

我用于 Windows 的着色器:

}

我用于墙壁的着色器:

}

我从脚本中设置了_StencilVal,这样每面墙都有自己独特的价值,我取得了不错的效果,但问题是我不能同时透过两个(或更多)窗户看。当它们在视图中重叠时,第二个窗口是灰色的(它不是透明的),但我仍然可以通过第一个窗口查看。

0 投票
0 回答
1694 浏览

java - Java 使用 OpenGL Stencil 创建大纲

我正在尝试在其顶部渲染对象的轮廓,但我遇到了一些困难。我对 OpenGL 不太了解,所以大部分来自以下教程。期望的效果应该是这样的:

但这是目前的结果:

我用来执行此操作的代码是:

并且doRender已经存在渲染播放器的方法。这方面的任何事情都会有所帮助。

0 投票
1 回答
908 浏览

android - android opengl 2.0 模板缓冲区不起作用

当我尝试使用模板缓冲区功能时,我在我的 android 设备上遇到了非常奇怪的行为。(GLES20.glEnable(GLES20.GL_STENCIL_TEST);)

这是我的代码:

我得到以下结果: 我的代码的结果

起初我怀疑我的代码然后我尝试了模板示例: google stencil test 并得到以下结果:

谷歌在我的设备上进行模板测试的结果

看起来opengl和模板缓冲区功能存在一些问题......我正在使用带有android 4.4.4的摩托罗拉Moto G。这是某种已知的错误吗?有一些解决方法吗?

0 投票
1 回答
2152 浏览

c++ - 使用 Stencil-buffer 勾勒出 3D 模型

首先我想提一下,我发现我认为是完全相同的问题,不幸的是没有答案,在这里: Java Using OpenGL Stencil to create Outline

我将在下面发布我的代码,但首先是问题所在:从这个捕获**,您可以看到整个框架结构正在显示,而不是球体周围的单线。我想摆脱里面的所有这些线条!

** 显然我无法添加图片:请参阅此链接 - 想象一个球体,四边形的所有边缘在 3 像素大线中可见。
http://srbwks36224-03.engin.umich.edu/kdi/images/gs_sphere_with_frame.jpg


这是给出该结果的代码:

现在只是为了证明一点,我厌倦了使用模板缓冲区做一些不同的事情 - 我只是想确保我的代码中的所有内容都到位,以便它工作。

** 不幸的是,我再次无法显示我得到的结果的屏幕截图:场景就像这样
http://mathworld.wolfram.com/images/eps-gif/SphereSphereInterGraphic_700.gif
但较小的球体是不可见的(RGB 蒙版已停用),并且可以通过孔看到世界背景(而不是更大的球体内部 - 面部剔除已停用)。

这就是代码……有趣的是,我可以更改很多东西,例如激活/停用 STENCIL_TEST,将操作更改为 GL_KEEP,甚至将第二个 stencilFunc 更改为“NOT EQUAL 0”……结果总是一样的!我想我在这里缺少一些基本的东西。

瞧!如果有人能指出我正确的方向,我将不胜感激。我还将确保将您的答案参考我找到的其他帖子。

0 投票
1 回答
1856 浏览

opengl - OpenGL Stencil - 排除透明像素

我有这个纹理,我想使用模板缓冲区作为掩码:

然后我想在屏幕上绘制一个图像 IMG,它应该只出现在上面图像可见的地方(有颜色的地方),因此不包括顶部边缘上方和渐变下方的透明像素。

问题是每当我在屏幕上绘制图像 IMG 时,无论像素是否透明,它都会出现在绘制图像的任何地方。

所以我考虑过使用,ALPHA_TEST但它在最新的 OpenGL 版本中消失了,所以我尝试使用v_color.a == 0v_color.r == 0在我的片段着色器中丢弃片段,但它什么也没做......

片段着色器:

顶点着色器:

代码 :

结果 :

红色箭头显示了超出边界并且我想要消失的部分。黄色方块是剪裁区域,为您提供方便。

0 投票
1 回答
580 浏览

c# - 无法让模板缓冲区在 OpenTK 中工作,简单的 2D 四边形

我一直在尝试让模板测试在我的 OpenTK 2D 游戏中工作,但没有成功 - 我只想在模板缓冲区中绘制低于 1 值的纹理部分。花了很长时间阅读模板及其工作原理,但在 c# 中找不到单个示例。下面的代码是我尝试从下面的链接移植代码:

opengl 模板缓冲区 - 不太好用

这是: http: //pastebin.com/vJFumvQz

但我根本没有蒙版,只有蓝色内的绿色矩形。我怀疑我需要以某种方式初始化缓冲区?任何帮助将不胜感激。

0 投票
1 回答
915 浏览

opengl - 检查模板位,然后写入另一个位

我正在我的 3D 引擎中渲染反射表面。我需要执行两个模板操作。首先,我通过深度测试画出反射面,以找到表面的可见区域。然后我需要将模型绘制到 G-Buffer 中,该 G-Buffer 也被模板用来寻找绘制我的天空盒的区域。

  • 绘制表面:始终绘制,写入位 #1

  • 绘制模型:仅在设置位 #1 时绘制,写入位 #2

我将如何使用 OpenGL 来做到这一点?我不确定 glStencilFunc ref 和 mask 值以及 glDepthMask 值之间的关系。