将噪点纹理自动映射到3D模型上

我想对物体应用一种噪声/灰尘纹理,使其看起来很好,并且不需要在模型中进行UV映射。 这是因为我想有可能将这个应用到任何对象,尽管他们已经有一些其他的纹理。 只是为了让任何东西看起来很脏。

因为这是噪音types的纹理,所以不需要在脸部之间缝好。 优先级是纹理比例被保留。

在顶点着色器中,我有顶点坐标以及正常,副法线和正切。 我想到了将3D顶点坐标投影到由法线定义的平面上并从那里获取2d坐标,然后将它们用作UV。 但是要么我无法得到正确的方程式,要么不行。 我检查一个球体的结果,我总是得到纹理拉伸的地方。

有什么办法可以取得好成绩?

如果这个问题我使用XNA / Monogame,C#,HLSL。

更新:我发现这个:

计算旋转matrix以在3D中将向量Aalignment向量B? https://math.stackexchange.com/questions/180418/calculate-rotation-matrix-to-align-vector-a-to-vector-b-in-3d/897677#897677

我认为这可以工作:

  1. 寻找旋转matrix,它将平面旋转到(0,1,0)
  2. 使用这个matrix来旋转当前的顶点位置。
  3. 从(u,v)的旋转位置取(x,z)。

然而,如果这些方程式我的math技能是不够的,使algorithm。 这会工作吗?

您可以使用较小的3D纹理作为噪点,只需使用模型的顶点坐标作为纹理坐标。

https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture3d.aspx