Xna HLSL如何正确勾勒平面着色模型的轮廓

Xna HLSL如何正确勾勒平面着色模型的轮廓,xna,shader,hlsl,vertex,outline,Xna,Shader,Hlsl,Vertex,Outline,我有个问题,希望你能帮我。我一直在忙着用xna制作游戏,最近开始使用着色器(hlsl)。有一个着色器,我喜欢,使用,并希望改进 着色器通过绘制模型的背面(黑色)并沿其法线平移顶点来创建轮廓。现在,对于平滑着色模型,这很好。一、 不过,我使用的是平面阴影模型(我是从手机上发布的,但如果有人不明白这意味着什么,我可以稍后上传图片)。这意味着顶点将沿其对应面的法线平移,从而在面之间形成可见的间隙 现在,问题是:有没有一种方法可以计算(在着色器或xna中),我应该如何平移每个顶点,或者唯一可行的方法是只

我有个问题,希望你能帮我。我一直在忙着用xna制作游戏,最近开始使用着色器(hlsl)。有一个着色器,我喜欢,使用,并希望改进

着色器通过绘制模型的背面(黑色)并沿其法线平移顶点来创建轮廓。现在,对于平滑着色模型,这很好。一、 不过,我使用的是平面阴影模型(我是从手机上发布的,但如果有人不明白这意味着什么,我可以稍后上传图片)。这意味着顶点将沿其对应面的法线平移,从而在面之间形成可见的间隙

现在,问题是:有没有一种方法可以计算(在着色器或xna中),我应该如何平移每个顶点,或者唯一可行的方法是只制作3d模型的副本,但使用平滑着色

提前谢谢,希望你能教育我

编辑:或者,我可以只加载平滑着色模型,并尝试在着色器中对其进行平面着色。但是,这意味着我必须能够找到对应面的所有顶点的法线,添加它们的法线,并对结果进行规格化。有办法做到这一点吗

EDIT2:到目前为止,我发现了一些最终似乎不起作用的选项:在hlsl中设置“shademode”现在已经不推荐了。将fillmode设置为“线框”会很整洁(在剔除正面时),只要我能够设置线的厚度


我正在研究一个新主意。我可能会遍历顶点,找到它们在屏幕上的位置,然后使用类似于圆线库的东西在这些点之间绘制二维线。我要试试这个,看看它是否有效。

好的,我研究这个问题已经有一段时间了,发现了一些非常有效的方法

我没有做很多复杂的数学来绘制正确深度的二维线,而是简单地做了以下工作: 设置一个光栅化器状态,该状态将剔除正面,绘制线框,并具有稍微负的深度偏移。 现在用全黑绘制模型(我为此修改了着色器) 设置一个光栅化器状态,该状态用于剔除背面、以fillmode.solid绘制并具有0深度偏移。 现在正常绘制模型

因为我们不能改变线框线的厚度,所以留下了一个非常纤细的轮廓。就我而言,这其实并不太糟糕

我希望这些信息对以后的人有用