【发布时间】:2014-06-04 16:44:54
【问题描述】:
一段时间以来,我一直试图弄清楚如何在我的游戏中制作对象选择大纲。 (所以玩家可以在鼠标悬停时看到物体超过其他一切)
结果应该是这样的:
我想使用的解决方案是这样的:
- 第 1 层:以常规阴影绘制模型。
- 第 2 层:绘制红色副本,使用顶点着色器沿法线缩放。
- 蒙版:绘制模型的黑色/白色平面颜色,将其用作第二层的模板蒙版,隐藏内部并显示第一层。
问题来了。我真的找不到任何关于口罩的好的学习资料。我可以从轮廓形状中减去内部吗?我做错了什么?
我不知道如何堆叠渲染通道以使遮罩起作用。 :(
renderTarget = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, renderTargetParameters)
composer = new THREE.EffectComposer(renderer, renderTarget)
// composer = new THREE.EffectComposer(renderer)
normal = new THREE.RenderPass(scene, camera)
outline = new THREE.RenderPass(outScene, camera)
mask = new THREE.MaskPass(maskScene, camera)
// mask.inverse = true
clearMask = new THREE.ClearMaskPass
copyPass = new THREE.ShaderPass(THREE.CopyShader)
copyPass.renderToScreen = true
composer.addPass(normal)
composer.addPass(outline)
composer.addPass(mask)
composer.addPass(clearMask)
composer.addPass(copyPass)
我也不知道是使用渲染目标还是渲染器作为作曲家的来源。 :( 我应该在作曲家中获得第一次通过吗?为什么我需要复制通过?这么多问题,我知道。但是没有足够的资源可以学习,我已经在谷歌上搜索了好几天。
感谢您的建议!
【问题讨论】:
-
也许另一种方法对您有用:stackoverflow.com/questions/17739760/…
-
@WestLangley 哦,哇。我完全错过了这一点。这看起来就像我需要的东西。我会尝试一下。我简直不能感谢你!很高兴你经常出现堆栈溢出。
-
@WestLangley 仔细检查,这对我没有帮助。我不仅需要将对象复制到第二个场景,还需要复制所有动态灯光,这会增加很多开销。所有这些都是为了在其他人面前绘制整个对象,这甚至不是我最初想要的。我真的只需要画出轮廓,这意味着要找出遮罩的工作原理。或者使用某种光栅过滤器。
-
没关系,明白了。我会发布解决方案。
-
查看我对您发布的解决方案的评论。这仅适用于范围较窄的网格类型,并不是一个完整的解决方案。