Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 轮廓对象(标准比例和模具蒙版)三.js_Three.js_Webgl - Fatal编程技术网

Three.js 轮廓对象(标准比例和模具蒙版)三.js

Three.js 轮廓对象(标准比例和模具蒙版)三.js,three.js,webgl,Three.js,Webgl,一段时间以来,我一直在试图找出如何在我的游戏中做一个对象选择大纲。(因此,玩家可以在鼠标悬停时,在所有其他对象上方看到该对象) 结果应该是这样的: 我想使用的解决方案如下: 第1层:在常规着色中绘制模型 第2层:以红色绘制副本,使用顶点着色器沿法线缩放 遮罩:绘制模型的黑色/白色平面颜色,将其用作第二层的模板遮罩,以隐藏内部并显示第1层 问题来了。我真的找不到关于面具的好的学习材料。我可以从轮廓形状中减去内部吗?我做错了什么 我不知道如何堆叠渲染过程以使遮罩工作:( 这里有一个 我也不知道是使

一段时间以来,我一直在试图找出如何在我的游戏中做一个对象选择大纲。(因此,玩家可以在鼠标悬停时,在所有其他对象上方看到该对象)

结果应该是这样的:

我想使用的解决方案如下:

  • 第1层:在常规着色中绘制模型
  • 第2层:以红色绘制副本,使用顶点着色器沿法线缩放
  • 遮罩:绘制模型的黑色/白色平面颜色,将其用作第二层的模板遮罩,以隐藏内部并显示第1层
  • 问题来了。我真的找不到关于面具的好的学习材料。我可以从轮廓形状中减去内部吗?我做错了什么

    我不知道如何堆叠渲染过程以使遮罩工作:(

    这里有一个

    我也不知道是使用渲染目标还是渲染器作为作曲器的源代码。:(我应该拥有作曲器的第一个过程吗?为什么我需要复制过程?我知道有这么多问题。但我已经在谷歌上搜索了好几天了,只是没有足够的资源可以学习


    谢谢你的建议!

    这是一个js fiddle工作解决方案。不客气。:)

    仅使用两个渲染过程进行更新(归功于WestLangley):

    缺少的部分是:

    composer.renderTarget1.stencilBuffer = true
    composer.renderTarget2.stencilBuffer = true
    outline.clear = false
    

    现在我想我已经从THREEx库中找到了一个更简单的解决方案。它预先缩放网格,所以你不需要实时着色器。

    也许另一种方法对你有用:@WestLangley噢,哇。我完全错过了这个。这看起来正是我需要的东西。我会尝试一下。我真是太感谢你了!很高兴你经常光顾堆栈溢出。@WestLangley仔细检查,这对我没有任何帮助。我不仅需要将对象复制到第二个scene,还有所有动态灯光,这会增加很多开销。所有这些都是为了在别人面前绘制整个对象,这甚至不是我最初想要的。我真的需要绘制轮廓,这意味着了解遮罩是如何工作的。或者使用某种光栅过滤器。没关系,明白了。我会发布解决方案。请参阅我对你的评论你发布的解决方案。这只适用于有限的网格类型,不是一个完整的解决方案。很好!你不需要3个摄像头(至少在本演示中是这样),也不需要将摄像头添加到场景中。另外,通过指定四元数,您可以忽略在渲染循环中更新2个网格的旋转。请参阅@WestLangley Nice!我只是想找出旋转部分。非常感谢。:)现在要解决的最后一件事是骨骼动画数据从一个蒙皮网格到另一个。如果有新问题,请发表新文章。下面是另一个更简单的问题,原始帖子的解决方案:此解决方案仅适用于具有漂亮、圆形、连接面的网格。将圆环结更改为长方体几何体,您将看到它无法正确找到边。问题在于您编写的着色器,它仅沿法线方向偏移顶点,当您的边彼此之间有较大程度的变化时,会留下一个“孔”,就像长方体一样。
    composer.renderTarget1.stencilBuffer = true
    composer.renderTarget2.stencilBuffer = true
    outline.clear = false