问题标签 [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 回答
2632 浏览

opengl - 凹多边形绘图

对于使用 OpenGL 绘制复杂的凹多边形,最好将其细分为三角形,还是使用模板缓冲区?我猜模板缓冲区对于单帧会更快,但如果多边形不改变,三角剖分对于多帧会更好。但是,我还没有真正尝试过,所以我不知道。

0 投票
4 回答
3773 浏览

c++ - OpenGL 模板测试是在片段程序运行之前还是之后发生的?

当我设置glStencilFunc( GL_NEVER, . . . )有效地禁用所有绘图,然后运行我的 [shader-bound] 程序时,与让片段着色器运行相比,我没有得到任何性能提升。我认为模板测试发生在片段程序之前。不是这样吗,或者至少不能保证?将片段着色器替换为仅将常量写入 gl_FragColor 的片段着色器确实会导致更高的 FPS。

0 投票
2 回答
1003 浏览

opengl - OpenGL:模板缓冲区问题(墙+窗口)?

我想使用模板缓冲区创建一堵里面有窗户的墙。我的代码如下所示:

但这不起作用,我得到了整个填充墙,没有窗户,有什么建议吗?

0 投票
4 回答
7584 浏览

java - 让 OpenGL-ES 模板缓冲区工作

使用适用于 Android 的 opengl-es 中的模板缓冲区,我只是试图掩盖屏幕的绘图部分。我想我的设置是正确的,但它并没有掩盖非模板部分。下面是我正在做的代码的提取。

有人发现这有什么问题吗?它所做的基本上是画一个框,说是屏幕的一半(如果我启用了颜色,这将起作用),它将该区域的模板缓冲区设置为 1。最后我绘制到整个屏幕。我希望它只绘制到上半部分,但它会绘制所有内容。

提前致谢。

0 投票
1 回答
239 浏览

direct3d - 无法让模板工作

试图让 Stencil 在我的应用程序中工作。我使用 Sprites 将内容渲染到设备上。内容可以是电影、图片或文字。

我可以使用这些 Sprites 设置模板缓冲区,以便在以后的传递中使用模板来绘制其他正在渲染的 Sprites?

我什至无法通过设置 StencilFunction = Compare.Never 来印出任何 Sprite!我可能做错了什么?

我已经花了几乎一整天的时间查看与 MDX 中的 Stencils 相关的帖子,但就是无法正常工作。

更多的搜索让我找到了一种技术,其中我们绘制了要添加到模板缓冲区的形状的轮廓。在我的情况下真的需要这样做吗?我只想使用精灵,并将它们添加到模板缓冲区以模板化其他精灵。

编辑:好的..所以我想出了如何完成它。参考这篇帖子——http ://www.gamedev.net/community/forums/viewreply.asp?ID =1999276

但是现在精灵忽略了 alpha 值并渲染精灵不透明。类似于我们将 alpha blending 设置为 false 时得到的效果。有任何想法吗?

0 投票
1 回答
1800 浏览

opengl - OpenGL模板缓冲区或操作?

我不确定这是否可行,但值得一试。我正在使用模板缓冲区来减少使用此算法的延迟渲染器中光量的过度绘制(当相机在体积之外时):

  1. 使用便宜的着色器,绘制深度测试设置为 LEQUAL 的背面,在模板缓冲区中标记它们。
  2. 使用昂贵的光照着色器,绘制深度测试设置为 GEQUAL 的正面。

这将导致只有光体积内的像素被着色。绘制多个灯光时会出现问题。首先,由于状态更改代价高昂,因此在每个灯光的廉价和昂贵着色器之间反复切换可能不是最好的主意。理想情况下,我想通过使用廉价着色器渲染 8 个光量,然后使用昂贵的着色器渲染 8 个光量来利用模板缓冲区的所有 8 位。但是,当灯光重叠时会出现问题,因为无法分辨哪些像素属于哪些灯光。

想到的解决方案是在每个灯的模板缓冲区中使用 1 位。因此,对于 light n,在廉价通道中标记模板缓冲区中的第n位,然后在昂贵通道期间仅渲染具有该位的像素。

我以前没有使用过模板缓冲区,但从我读到的内容来看,这似乎是不可能的。为此,我必须使用按位 OR 设置模板缓冲区,并且模板函数必须是按位 AND。但是,我可以看到的模板缓冲区上的唯一操作是:KEEP、ZERO、REPLACE、INCR、DECR 和 INVERT,唯一的功能是:NEVER、ALWAYS、LESS、EQUAL、LEQUAL、GEQUAL、GREATER 和 NOTEQUAL。

有没有办法使用模板缓冲区以某种方式获得这种 OR 和 ANDing 行为?如果没有,是否有另一种方法可以有效地渲染光量?

0 投票
1 回答
1405 浏览

c++ - 影子卷 - 最后阶段

我继续在 OpenGL 中处理阴影体积,在完成体积本身之后,我需要使用模板缓冲区绘制阴影,这就是我卡住的地方:) 我渲染了这个场景: http: //prntscr.com/17lyr As你看,球体代表光源,一个蘑菇的体积直接绘制到屏幕上,一个没有(我希望看到阴影)。它们是绝对相等的,可以在 X 轴上平移一个模型的一些单位。这是我正在使用的代码:

这是我的 GL 初始化函数:

在我的主要功能中:

我的代码一切正常吗?因为我看不到阴影,甚至不知道如何检查模板值是否设置正确。

0 投票
1 回答
1771 浏览

c++ - OpenGL 使用带有球体的 GL_STENCIL

我正在使用 OpenGL,我正在尝试创建一个具有反射表面的球体。我有它反射,但反射不正确。反射中的物体应该根据表面的曲线弯曲和变形,而不是我得到的只是一个直线反射。我没有过多地使用 GL_STENCIL,因此非常感谢您的帮助。我提供了一些代码,例如球体的创建和绘制方法。如果有人需要更多,请告诉我。

创建:

绘画:

由于我是使用 GL_STENCIL 的新手,我不确定它是否只是一些小东西,或者是否需要做更多工作来检测反射角度。

0 投票
1 回答
1118 浏览

opengl - OperGL 模板缓冲区没有按我的预期运行

我有一个简单的 UI 小部件系统,并且我使用模板缓冲区充当剪辑器,这样小部件的子级就不能在小部件之外绘制。基本上,所有东西的模板值都在这个小部件的范围内,这个值是递增的。然后,在我制作剪刀后绘制的任何东西都必须在盒子内。

剪裁器构造函数如下所示:

当裁剪器超出范围时,析构函数运行,如下所示:

但是,当我运行它时,只会绘制我的根小部件的直接子级。孩子们的孩子根本不画。我已经尝试了很多这样的变体,但我一直在做错事。我不知道我哪里错了。

0 投票
1 回答
7312 浏览

android - 在 android Native 代码 (ndk) 中使用 OpenGL ES 2.0 FrameBuffer (FBO) 和 Stencil

我正在尝试使用 NDK (r5b) 生成一个帧缓冲区对象并在本机 android 应用程序中使用模板。目标设备运行 froyo 2.2,支持 OpenGL ES 2.0。

所以,我一直在我的 c++ 本机库中编写大量 gl 代码,除此之外没有遇到任何问题。我似乎无法让它发挥作用。

这是用于创建帧缓冲区的代码片段。完整性很好,但屏幕仍然完全黑。就像我正在创建的 fbo 并没有真正绑定到由应用程序的 Java 部分创建的 gl 表面。我的应用程序代码的其余部分都很好,如果我删除了 fbo 创建和绑定,除了我没有我的应用程序需要的模板工作之外,一切都很好。

我也尝试过渲染到 2D 纹理而不是渲染缓冲区……也没有用。

那么,有没有办法解决这个问题?我这里有什么问题吗?如果有人有任何想法,请让我知道....花了太多时间来查找这个问题...呵呵;)

提前致谢 !

干杯!


编辑 :

好的,我已经设法使模板缓冲区工作,但 FBO 只是不工作。我认为android不完全支持OpenGL ES 2.0(顺便说一句,这里使用r5b)。我认为方法存根已定义,但未完全实现。或者创建的 GlSurfaceView 没有与 FBO 正确链接。

至于模板缓冲区,我必须这样做

并删除 glDepthMask 的使用,以使它们正常工作。