问题标签 [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.
webgl - webgl 绘图顺序,模板缓冲区
我正在阅读 learningwebgl.com,令我困惑的是它绘制了我绑定为最后一个元素的第一个缓冲区?
我希望只看到蓝色方块,因为其他所有内容都被透支了,输出似乎是相反的顺序?
我还阅读了有关模板缓冲区的信息,所以我尝试做的是创建一个蒙版(红色),然后在蓝色方块上应该有一个绿色三角形。
面具有效(http://jsfiddle.net/D3QNg/3/),但我不知道它是否正确,或者我只是幸运。
将不胜感激一些帮助。
android - OpenGL ES 模板缓冲区不适用于特定设备
我正在使用 OpenGL ES 2.0,并使用模板缓冲区。下面是我制作的一个简单的模板缓冲区演示的代码。模板只能在一台设备上正常工作。
设备如下:
Android 4.2.2、PowerVR SGX 544MP (GPU)、Allwinner A10 平板电脑。(模板缓冲区在此设备上完美运行)
Android 4.1.2、Adreno 225 (GPU)、Galaxy S III 手机。(Stencil Buffer 不起作用,有些闪烁的stencil 鬼影很少。
Android 4.2.2、Mali-400MP (GPU)、瑞芯微 rk30sdk 平板电脑。(在最初的测试中,Stencil Buffer 没有工作,经过多次更改后它现在似乎工作了,状态是有问题的。修复操作中 Stencil Buffer 的具体更改目前未知)
相同的最新 .APK 给出了上述结果。
来自“Play Store”的应用程序“OpenGL 3D Showcase”在所有三个设备上运行,并且“showcase”#18“Stencil Buffer Shadows”[OGL 1.1] 完美运行,没有错误消息。源代码随应用程序提供,经审查无效。
下面是我的模板代码:
在里面:
初始化2:
所有注释的“setEGLConfigChooser”调用都已尝试。
有什么想法可以跟踪问题吗?还有什么我可能会得到帮助的地方吗?(如果需要,可以联系 MFG/Android/Google 让我去任何地方吗?)
directx - 识别深度测试中检查的多边形 (DX11)
我是图形编程世界的一个相当极端的新手,所以如果这个问题有一个明显的答案,请原谅我,但我还没有设法找到它。
在 DirectX 11 中执行深度测试时,您如何确定在任何给定时间正在测试哪些三角形?我试图手动告诉深度测试失败,除非通过特定的多边形查看特定的多边形(即,您只能通过一个表面看到一组几何图形,而另一组只能通过另一个表面看到)。
我想真正的问题是,在测试像素时,系统如何引用该像素的数据(位置、颜色等)?有什么我完全忽略的吗?
目前,我对更大问题的替代解决方案不感兴趣,只是对这个特定问题的回答。谢谢你的帮助!
three.js - Three.js:PointerLockControls 以某种方式改变模板的位置
我正在使用模板缓冲区将两个 THREE.js 场景相互合成。这可行,但是当我尝试使用 PointerLockControls 时,移动相机(使用鼠标或键盘)以某种方式导致视图的模板部分被移动/移动。它似乎落后于相机位置。
我尝试过其他控件(轨迹球、轨道),使用这些控件时不会出现此问题。
有些东西似乎在发生冲突,但我不知道在哪里看。
PointerLock 代码直接从示例中复制而来。
这是渲染代码:
这是一个小提琴:http: //jsfiddle.net/g8EWG/
如果你从左向右移动,或者只是环顾四周,这种变化是非常明显的。
任何帮助将不胜感激。
c++ - 深度 + Stencil 帧缓冲问题
我的 OpenGL 应用程序需要模板和深度缓冲区。深度缓冲区至少需要通过帧缓冲区对象渲染到纹理,这样我就可以做延迟着色和其他后处理效果。我已经设置了这个帧缓冲区(使用 GL_DEPTH24_STENCIL8),但我有一些顾虑和问题。
首先,我想使用 32 位浮点深度缓冲区。GL_DEPTH32F_STENCIL8 选项似乎是最明显的。我想知道的是,这种格式的实际内存占用是多少?从逻辑上讲,它将是 40 位,但是知道我对对齐做了什么,如果他们将其填充到 64 位,我不会感到惊讶,而且许多消息来源说这正是发生的情况。我很想知道。
也许将深度和模板缓冲区分开对我来说会更好?我是否必须担心这不受支持?缓存效率如何,因为模板和深度测试经常一起执行?
PS。我没有使用多重采样。
c++ - Stencil Buffer 在 OpenGL 中是如何工作的
我正在尝试在给定链接http://commons.wikimedia.org/wiki/File:OpenGL_Tutorial_Stencil.png中描述的 OpenGL 中实现以下效果,代码片段也在下面,这是官方的 openGL 维基百科教程。
尽管它有代码和注释说明,但我仍然很难理解 openGL 中模板缓冲区操作的逻辑。提醒一下,在开始模板之前,我阅读了红皮书中的大部分说明,所以我知道并且熟悉 glStencilFunc、glStencilOp 和 glStencilMask 等是如何工作的,但仍然有一些晦涩难懂的东西我的想法与模板有关。
这是我如何解释代码的演练:
我相信模板测试将始终通过
glStencilFunc(GL_NEVER, 1, 0xFF); glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
,模板测试失败将导致模板缓冲区填充 1 秒,因为设置的指令glStencilOp
如果前面的代码块 (#1) 设置模板缓冲区中的所有像素,我们通过
glStencilMask(0xFF);
过程调用来实现。我们是否保证所有 1 都成功写入模板缓冲区,或者实际上是什么?我们画了圆圈然后打开遮罩,但这一次
glStencilMask(0x00)
,这是一个令人困惑的地方,我认为这涉及防止模板缓冲区值被新值覆盖,但代码注释说这只是用 0 填充模板缓冲区。最后,如果您不更改
glStencilMask(0x00)
模板缓冲区中的任何值(由于),那么拥有// fill 0s glStencilFunc(GL_EQUAL, 0, 0xFF); /* (nothing to draw) */ // fill 1s glStencilFunc(GL_EQUAL, 1, 0xFF);
主程序体:
c++ - Linux C++ 上 Gtkmm 中的 OpenGL 模板缓冲区
我一直在尝试为学校项目使用模板缓冲区生成反射。我正在关注本教程:http ://www.opengl.org/archives/resources/code/samples/mjktips/Reflect.html它描述了如何通过在平面上反射场景来创建反射并再次绘制它以创建反射,然后剪裁反射以去除突出的部分。
我按照教程进行操作,但没有剪裁,反射显示完整。我尝试了以下方法:
输出为“Stencil bits is 0”。所以我根本没有模板缓冲区。如何在 Gtkmm 中创建模板缓冲区(我读到创建模板缓冲区是库特定的)?
opengl - 将渲染模板印刷到未知曲面上
想要将多个不规则纹理贴在曲面上(网格与 xyz 顶点和每个指定的 uv)。我正在从模型文件加载网格,并且对表面没有任何先验知识......我们所知道的是它将具有“合理”的 uv 映射。想要选择一些 uv 区域并将纹理应用到它们。每个区域由 uv 坐标中的边界多边形指定。在这种情况下不知道等效的 xyz poly,或者我认为答案很简单。
我们对平面和简单的圆柱表面(我们将其近似为一系列扁平条纹,通过选择法线作为平均值进行平滑)进行了这种工作。在这两种情况下,我们都知道从 uv 到 xyz 的唯一映射,因此我们设置模板缓冲区以通过在绑定纹理和绘制真实表面之前将等效的 xyz 多边形绘制到模板缓冲区来限制绘制到所需的 uv 区域。
在将纹理贴到表面时,我们还在纹理中使用 rgba 透明度。通常每个纹理区域都是一个小的旋转矩形,因此我们将四个顶点绘制到模板缓冲区,然后使用纹理矩阵旋转它,并使用纹理中的 rgba 透明度来确保仅应用纹理的右侧部分。这一切都很好。
想重用我们的工作代码,但现在将这些纹理应用于任意曲面/网格。我们正在加载和绘制这些模型,并且已经可以将纹理应用于整个面[即 uv 从 (0,0) 变为 (1,1) ]。现在我们想要扩展它并将“放置”的纹理应用到每个表面的区域。
认为有可能直接将 uv 多边形绘制到模板缓冲区,甚至不知道等效的 xyz 多边形......然后所有现有代码都可以工作。也许可以使用像帧缓冲区对象这样的技巧,并对其进行模板多边形的初始绘制,然后在曲面网格的“真实”绘制期间将其用作模板。那会是一个好方法吗?或者,还有更好的方法?
欢迎任何建议或相关示例的 url 链接... PS 看过这些线程...有点相关,但我认为不是完全相同的问题...
我目前正在查看一些用于屏幕外阴影映射的工作 FBO 设置/使用代码,并试图使其适用于这种看似简单的情况。我不清楚的一点是需要设置 gl 调用......我对如何设置它感到很困惑。这是硬件阴影 FBO 设置的摘录,其中的位被切掉了??添加...任何关于正确顺序的帮助表示赞赏。
注意:tex
, m_Frambuffer
are ints
, 正确分配了 textureid 和 framebuffer,认为那个位没问题。我的主要困惑是
- 似乎代码确实将 glBindTexture、glTexImage2D、glBindTexture 释放为 0:提前释放是否正确?
- 需要 glDrawBuffer + glReadBuffer 调用吗?
javascript - webGL - 如何在帧缓冲区旁边设置模板缓冲区并使用它?
徘徊,如果有人可以帮助我。我目前正在使用 webGL 将我的内容渲染到帧缓冲区,以便它可以用作项目其他部分的纹理。这就像一个冠军。但是,我现在需要在渲染到帧缓冲区时使用模板缓冲区,因为我正在使用它来屏蔽。我似乎无法弄清楚如何创建/附加模板缓冲区以使用我的帧缓冲区?到目前为止,这是我的代码:
所以我的问题是,我如何创建并使用模板缓冲区以及上面创建的 frameBuffer?
谢谢大家!