我认为我已经解决了在Three.js中渲染网格边框/轮廓的实现问题,这是许多游戏用于突出显示对象/角色的技术。
例如Diablo 1和3
这里有详细信息和我的解决方案演示。
现在需要完成的是动画网格(如角色等)。问题是,蒙皮网格是使用顶点着色器进行动画处理的,我还使用着色器沿法线缩放(位移)网格。这可能很简单,但不幸的是我的数学技能几乎不存在。
例如Diablo 1和3
![Diablo 3](https://istack.dev59.com/NGpdZ.webp)
现在需要完成的是动画网格(如角色等)。问题是,蒙皮网格是使用顶点着色器进行动画处理的,我还使用着色器沿法线缩放(位移)网格。这可能很简单,但不幸的是我的数学技能几乎不存在。
问题
为了在着色器中对网格进行放大和动画,以下是我认为需要合并的两个方程:
来自蒙皮着色器:
mvPosition = modelViewMatrix * skinned
gl_Position = projectionMatrix * mvPosition
从位移着色器:
mvPosition = modelViewMatrix * vec4( position + normal * offset, 1.0 )
gl_Position = projectionMatrix * mvPosition
演示
更新(使用GoodGuy的方程式):
这是在jsfiddle上的完整代码和演示(javascript)。
在这里,您可以找到着色器代码本身(glsl)。
内部图形是常规皮肤动画,轮廓是新方程式,但尚未完全适配。