问题标签 [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.
ios - OpenGL ES 2.0 - GL_POINTS 和模板缓冲区
我正在尝试通过应用模板缓冲区使用 GL_POINTS 在 OpenGL ES 2.0 中绘制纹理。模板缓冲区应该来自纹理。我将结果渲染到另一个纹理,然后将纹理呈现到屏幕上。这是我渲染到纹理的代码:
我得到的结果只是我的纹理被绘制而没有从模板上应用任何遮罩。关于这个问题我有几个问题:
- 是否可以使用带有 GL_POINTS 的模板缓冲区?
- 渲染到纹理时是否可以使用模板缓冲区?
- 模板纹理是否必须具有任何特殊属性(纯色、内部格式...等)?
- 我的代码有任何明显的错误吗?
这是我正在寻找的结果:
更新:
正如所选答案所指出的,我的问题主要是我没有将模板附加到 FBO 的模板附件上:
我不知道渲染到纹理时需要它。其次,我没有使用正确的模板测试。
做了工作。
c++ - OpenGL:清除模板缓冲区,除了某些位?
我将模板缓冲区用于两项工作。第一个是允许掩蔽发生,第二个是为可以“看到”的对象编写掩码。在这种特殊情况下,保留位是0x80
字节中的最后一位,其余位用于常规屏蔽。
第一个目的要求缓冲区在大约 127 次使用后被清除,否则过去的模板将在测试时再次变为“有效”,因为该值必须回滚为 1。第二个目的要求缓冲区中的保留位保持活动状态整个框架。
有没有办法清除整个模板缓冲区,同时保持保留位设置?
directx-11 - 如何为模板 DirectX 11 设置轮廓
我对 DirectX 和图形编码很陌生。我正在使用 SlimDX 进行实施。我正在绘制一张地图,显示特定区域的数据的可视化表示。我要做的就是采用状态形状,如果像素在该区域内,则绘制它,否则不绘制。这基本上就是模板,对吧?但我无法弄清楚我应该如何为模板缓冲区设置该多边形。或者这不是模板缓冲区的用途?
unity3d - 使用模板缓冲区制作窗口
我想在不同的墙壁上创建窗户,我希望它是动态的,所以我不想改变墙壁的几何形状,因为我希望能够移动窗户。所以我想使用模板着色器。我是着色器的新手,但我已经发现了一些东西,我想出了这个:
我用于 Windows 的着色器:
}
我用于墙壁的着色器:
}
我从脚本中设置了_StencilVal,这样每面墙都有自己独特的价值,我取得了不错的效果,但问题是我不能同时透过两个(或更多)窗户看。当它们在视图中重叠时,第二个窗口是灰色的(它不是透明的),但我仍然可以通过第一个窗口查看。
java - Java 使用 OpenGL Stencil 创建大纲
我正在尝试在其顶部渲染对象的轮廓,但我遇到了一些困难。我对 OpenGL 不太了解,所以大部分来自以下教程。期望的效果应该是这样的:
但这是目前的结果:
我用来执行此操作的代码是:
并且doRender
已经存在渲染播放器的方法。这方面的任何事情都会有所帮助。
android - android opengl 2.0 模板缓冲区不起作用
当我尝试使用模板缓冲区功能时,我在我的 android 设备上遇到了非常奇怪的行为。(GLES20.glEnable(GLES20.GL_STENCIL_TEST);)
这是我的代码:
我得到以下结果:
起初我怀疑我的代码然后我尝试了模板示例: google stencil test 并得到以下结果:
看起来opengl和模板缓冲区功能存在一些问题......我正在使用带有android 4.4.4的摩托罗拉Moto G。这是某种已知的错误吗?有一些解决方法吗?
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”……结果总是一样的!我想我在这里缺少一些基本的东西。
瞧!如果有人能指出我正确的方向,我将不胜感激。我还将确保将您的答案参考我找到的其他帖子。
opengl - OpenGL Stencil - 排除透明像素
我有这个纹理,我想使用模板缓冲区作为掩码:
然后我想在屏幕上绘制一个图像 IMG,它应该只出现在上面图像可见的地方(有颜色的地方),因此不包括顶部边缘上方和渐变下方的透明像素。
问题是每当我在屏幕上绘制图像 IMG 时,无论像素是否透明,它都会出现在绘制图像的任何地方。
所以我考虑过使用,ALPHA_TEST
但它在最新的 OpenGL 版本中消失了,所以我尝试使用v_color.a == 0
或v_color.r == 0
在我的片段着色器中丢弃片段,但它什么也没做......
片段着色器:
顶点着色器:
代码 :
结果 :
红色箭头显示了超出边界并且我想要消失的部分。黄色方块是剪裁区域,为您提供方便。
c# - 无法让模板缓冲区在 OpenTK 中工作,简单的 2D 四边形
我一直在尝试让模板测试在我的 OpenTK 2D 游戏中工作,但没有成功 - 我只想在模板缓冲区中绘制低于 1 值的纹理部分。花了很长时间阅读模板及其工作原理,但在 c# 中找不到单个示例。下面的代码是我尝试从下面的链接移植代码:
这是: http: //pastebin.com/vJFumvQz
但我根本没有蒙版,只有蓝色内的绿色矩形。我怀疑我需要以某种方式初始化缓冲区?任何帮助将不胜感激。
opengl - 检查模板位,然后写入另一个位
我正在我的 3D 引擎中渲染反射表面。我需要执行两个模板操作。首先,我通过深度测试画出反射面,以找到表面的可见区域。然后我需要将模型绘制到 G-Buffer 中,该 G-Buffer 也被模板用来寻找绘制我的天空盒的区域。
绘制表面:始终绘制,写入位 #1
绘制模型:仅在设置位 #1 时绘制,写入位 #2
我将如何使用 OpenGL 来做到这一点?我不确定 glStencilFunc ref 和 mask 值以及 glDepthMask 值之间的关系。