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

opengl - 这个简单的 OpenGL/JOGL 模板测试有什么问题?

我正在学习如何使用模板缓冲区,但到目前为止,即使是一个简单的例子也没有成功。事实上,尽管尝试了各种参数组合,但glStencilOpglStencilFunc还没有看到任何证据表明模板缓冲区正在工作。我开始怀疑我的图形驱动程序(Mac Pro、Mac OS X 10.8.5)或 JOGL(2.0.2)不支持它......或者我错过了一些非常基本的东西。

这是我所看到的:

在此处输入图像描述

我期待看到红色钻石被绿色钻石夹住。我究竟做错了什么?

0 投票
1 回答
1134 浏览

c++ - glreadpixels 模板缓冲区总是抛出 GL_INVALID_OPERATION

我正在尝试找出模板。现在我只是用模板值绘制一些框,然后读取值。每次我用 GL_STENCIL_INDEX 调用 glReadPixels 时,我都会得到 GL_INVALID_OPERATION。这是有问题的代码:

我已经尝试了 5 种不同的数据格式、3 种不同的 glPixelStore 模式,并且检查了glReadPixels 错误列表7 次。(是的,OGL 2.1)如果我将 STENCIL_INDEX 更改为 DEPTH_COMPONENT 它工作正常。我唯一无法确认的是我是否有模板缓冲区。是否有一些我缺少的初始化或一些 glGet 来检查?

潜在相关信息:Win7 x64 SP1 | 华硕 GTX650Ti | VS2012 终极版

这是绘制框的函数的代码,以防万一:

这不是 OGL 第一次无缘无故地做错事,但这打破了我编写接口的计划。

0 投票
2 回答
501 浏览

c++ - 模板缓冲和模板测试

根据我读过的书,模板测试是通过将参考值与对应于像素的模板缓冲区的参考值进行比较来实现的,但是在其中一本书中它指出:

A mask is bitwise AND-ed with the value in the stencil planes and with the reference value before the comparison is applied

这里我看到第三个参数是掩码,这是与模板缓冲区相关的掩码还是openGL本身生成的另一个参数?

有人可以解释比较过程以及values在此过程中起作用吗?

0 投票
1 回答
953 浏览

c++ - 将 OpenGL 模板功能移植到 DirectX 11

我有一些用 OpenGL 编写的渲染代码。我使用模板缓冲区来实现剪辑:

现在,问题是,我需要将此代码移植到 DX11。我在 MSDN 上看到了示例和一些不错的教程。我最终得到了这个逻辑:

现在,我不确定如何将模板设置为目标或输入。

MSDN 说:

如果我正确理解这些调用,第一个设置模板状态,而第二个将 pDSV 作为附加“附件”绑定到渲染目标。那是对的吗?

如果是这样,这会按我的预期工作吗?

提前感谢您的每一个帮助或有用的提示。

0 投票
2 回答
386 浏览

opengl - DirectX 和 OpenGL 之间的模板选项

我正在实现一个仿真层。除了模板的东西(我的阴影重叠)之外,其他一切都有效。

我只是想知道我是否在逻辑上做事 - 如果我正在做出正确的结论/假设:

以下是上面使用的。glAble() 只是 glEnable/glDisable 的包装器。

0 投票
0 回答
904 浏览

android - android模板缓冲区奇怪

我想使用 openGL ES 模板缓冲区在更大的矩形中掩盖一个小三角形。

使用模板缓冲区绘制小三角形

绘制一个全屏矩形。

期待结果: 期待结果

但结果是: Result1

好诡异,谁能帮帮我!

0 投票
1 回答
199 浏览

c# - XNA、alpha 测试、模板缓冲和两种不同的投影

我的问题是关于使用来自另一个投影的模板缓冲区作为另一个投影中的掩码。我不确定如何解决这个问题,所以我将继续编写一些代码:

好吧,如果我将 Camera.Projection 从第一个方程中取出并渲染到屏幕坐标空间,这将起作用。但是,这不适用于相机投影。我的理解是,与在屏幕空间中发生的后者绘制调用相比,渲染只是对“很远”的模板缓冲区进行。

如何使用第一个操作的模板作为第二个操作的掩码?

0 投票
0 回答
243 浏览

opengl - 我可以使用模板缓冲区防止 GPU 片段停止吗?

我对片段着色器进行了一些繁重的计算,并且这是在多次传递中进行的。但是在某些 Fragment 上,仅经过一次 pass 后结果就准备好了,而对于其他 Fragment,则需要更多的 pass。

正因为如此,很多片段会在一段时间后丢弃,但正如我们所知,这些线程可能会停止,直到所有其他片段都完成。

我想知道。由于某些 opengl 版本,可以从片段着色器写入模板缓冲区。当我知道我不需要对特定片段进行另一次传递时,我可以写入模板缓冲区。在下一个渲染过程中,我可以打开模板测试以防止这些片段再次计算。

我的问题:这会防止停滞问题吗?这些线程是否可以用于执行更多仍有待处理的片段,以便在每次通过消除下一次通过的片段时,每次通过都会比前一次更快?

换句话说,假设我需要计算一个 16x16 的纹理。在第一遍中,我必须计算 256 个片段(假设我有 16 个内核,这意味着 16 个周期)。例如,如果在第一次通过之后,我知道我只需要对 128 个片段进行进一步计算,并且我已经标记了在模板缓冲区中完成的片段,那么第二次通过的速度是否会提高一倍(所以:16 上的 128 个片段核心 = 8 个周期而不是 16 个)?

0 投票
1 回答
1197 浏览

c++ - OpenGL模板缓冲区凹多边形

我正在尝试做这个例子。

我仍然无法理解它是如何工作的,而且我在可视化代码的样子时遇到了困难。

我偶然发现了这篇我认为我能找到的最接近的帖子。

从红皮书链接,我怎样才能做一个“两遍算法”来获得所需的输出?如何使用GL_INVERT并检查像素是否被覆盖了偶数次?

我以某种方式设法理解了模板如何为凹多边形工作,但我现在的问题是多边形渲染不正确。

http://img.photobucket.com/albums/v442/ardo/ScreenShot2013-12-30at24155PM.png

我绘制它的位置在一个帧缓冲区中,它的设置如下:

然后我的绘图代码是:

我设置多重采样的方式在这里(这是在绘制图纸之前)

我的 blit 调用:

0 投票
2 回答
536 浏览

c++ - OpenGL Stencil Buffer,它们的支持程度如何?

  • OpenGL 中的硬件现在对模板缓冲区的支持程度如何?

  • 它比着色器支持更好/更差吗?

  • 如果硬件不支持,会用软件模拟吗?

不幸的是,我无法找到有关该主题的任何硬数据......我想假设由于模板是一项古老的技术,它会得到无处不在的支持。然而,作为一项古老的技术,它很容易被新的 GPU 硬件淘汰,转而支持片段着色器。

在我的场景中,我将结合使用 8 位模板缓冲区和 24 位深度缓冲区,与 VBO 一起使用(如果这会影响任何东西)。如果我使用模板缓冲区,那些没有模板支持的人将无法玩我正在制作的游戏,因此担心。如果他们至少可以模拟软件中的模板效果,虽然这并不理想,但足以让我的恐惧得到缓解。