我认为我已经解决了Three.js中网格渲染边框/轮廓的实现,这是许多游戏用于突出显示对象/角色的技术。
暗黑破坏神1和3例如
Here are details和demo of my solution。
现在还有待完成的是动画网格(用于角色等)。问题是,蒙皮网格使用顶点着色器进行动画处理,我还使用着色器沿着法线缩放(移位)网格。这可能非常简单但不幸的是我的数学技能几乎不存在。
为了让网格物体在着色器中按比例放大并设置动画,下面是我认为需要合并的两个方程式:
来自蒙皮着色器:
mvPosition = modelViewMatrix * skinned
gl_Position = projectionMatrix * mvPosition
从置换着色器:
mvPosition = modelViewMatrix * vec4( position + normal * offset, 1.0 )
gl_Position = projectionMatrix * mvPosition
更新(使用GoodGuy'等式):
这是 full code and demo on jsfiddle (javascript)
在这里你可以找到 shader code itself (glsl)。
内图是常规的蒙皮动画,轮廓是新的等式,它还不太合适。
答案 0 :(得分:4)
感谢WestLangley和GuyGood,以下是解决方案:
mvPosition = modelViewMatrix * (vec4( skinned.xyz + normal * offset, 1.0 ))
一个技术问题可能是法线未更新。有关详细信息,请阅读原始帖子下方的讨论主题。