我有一个问题,希望你能帮助我。我一直在忙着和xna玩游戏,最近开始进入着色器(hlsl)。这个着色器我喜欢,使用,并希望改进。
着色器通过绘制模型的背面(黑色)并沿其法线平移顶点来创建轮廓。现在,对于光滑阴影模型,这很好。然而,我正在使用平面阴影模型(我是通过手机发布的,但是如果有人对这意味着什么感到困惑,我可以稍后上传一张图片)。这意味着顶点沿着其相应面的法线平移,导致面之间的可见间隙。
现在,问题是:有没有办法计算(在着色器或xna中),我应该如何翻译每个顶点,或者是唯一可行的选项,只是制作3D模型的副本,但是顺利遮光?
提前致谢,希望你能教育我!
编辑:或者,我只能加载一个光滑阴影的模型,并尝试在着色器中对其进行平面着色。但是,这意味着我必须能够找到相应面的所有顶点的法线,添加它们的法线,并对结果进行标准化。有没有办法做到这一点?
EDIT2:到目前为止,我发现了一些似乎不起作用的选项:现在不推荐在hlsl中设置“shademode”。将fillmode设置为“线框”将是整洁的(同时剔除正面),如果我只能设置线条粗细。
我在这里正在研究一个新想法。我可以迭代顶点,在屏幕上找到它们的位置,并使用类似RoundLine库之类的东西在这些点之间绘制2d线。我打算尝试一下,看看它是否有效。
答案 0 :(得分:0)
好的,我一直在研究这个问题,发现了一些非常好的东西。
相反,做了很多复杂的数学来绘制正确深度的2d线,我只是做了以下几点: 设置一个光栅化器状态,用于剔除正面,绘制线框,并具有略微负深度偏差。 现在绘制所有黑色的模型(我修改了我的着色器) 设置剔除背面的光栅化器状态,绘制fillmode.solid并具有0深度偏差。 现在正常绘制模型。
由于我们无法改变线框线的粗细,因此我们留下了非常纤细的轮廓。就我的目的而言,这实际上并不太糟糕。
我希望这些信息对以后的人有用。