首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SCNTechnique中使用模板?

如何在SCNTechnique中使用模板?
EN

Stack Overflow用户
提问于 2017-01-01 21:27:10
回答 1查看 1.4K关注 0票数 5

基本上,我想在立方体周围呈现一个轮廓。为此,我认为可以使用具有以下呈现传递的SCNTechnique

  1. 将数据集正常呈现,并将其占用的像素写入模具缓冲区。
  2. 渲染稍大的立方体,如果他们没有交叉的模具在第一次通过。

问题是,SCNTechnique中的模板文档非常稀少,我无法精确地计算出如何使用它。

我已经成功地绘制了轮廓,首先绘制更大的“大纲立方体”,然后禁用深度测试,然后再绘制正常的立方体,这很好,但是由于这种方法的其他复杂情况,我想使用模板来代替。

为了让它使用模具缓冲区工作,我的第一次传递的stencilStates看起来很像(以及为什么我认为我需要这些属性):

代码语言:javascript
复制
clear = YES  // To clear the buffer from last 
enable = YES // To write to the buffer
behavior:
    writeMask = 1     // Use bit 1
    function = always // Always write to stencil regardless?

第二次传递的stencilStates如下所示:

代码语言:javascript
复制
clear = NO   // Keep the buffer from last step
enable = NO  // Don't write to the buffer (only read?)
behavior:
    readMask = 1      // Use bit 1
    fail     = keep   // Not sure if these...
    pass     = zero   // ...should be the other way round

有相当其他一些属性的模具缓冲行为,但我不确定我需要哪一个和如何使用它们。我也不确定模板缓冲区是否需要作为输入或输出列出每一次?

编辑1:,这正是我想要实现的,首先绘制蓝色、更大的大纲立方体,而不写入深度缓冲区:

如果不是因为在这个庄园里画一些副作用,我会把实现留在这里,但是我认为模板方法可以避免这些副作用,我认为知道如何使用它们是有用的!

编辑2:我一直在玩,试图直接使用OpenGL (在C中)产生类似的效果。我并不完全理解模板是如何工作的(基本上我借用了教程中的代码),但是这些命令产生了我想要实现的目标。

在绘制主多维数据集之前,写入模具缓冲区:

代码语言:javascript
复制
glStencilFunc(GL_ALWAYS, 1, 0xFF); // Set any stencil to 1
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glStencilMask(0xFF); // Write to stencil buffer
glClear(GL_STENCIL_BUFFER_BIT); // Clear stencil buffer (0 by default)

绘制主多维数据集之后,在绘制较大的大纲多维数据集之前,测试当前模具缓冲区:

代码语言:javascript
复制
glStencilFunc(GL_EQUAL, 0, 0xFF); // Pass test if stencil value is 0
glStencilMask(0x00); // Don't write anything to stencil buffer

因此,问题是如何使用SCNTechnique实现上述目标。

EN

回答 1

Stack Overflow用户

发布于 2017-08-16 16:14:06

您可以使用SCNTechnique绘制大纲。其思想是将对象掩码绘制到缓冲区中,模糊掩码的一个通道,然后将其与原始呈现的帧结合起来。该组合着色器检查模糊不清的通道,而非模糊的通道,并且只呈现物体的外部轮廓。

这里有一个例子在节点周围画了一个亮点:https://github.com/laanlabs/SCNTechniqueGlow,您应该能够修改它以获得您想要的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41419180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档