【问题标题】:How to make a decal (How can I project a texture to a complex geometry?)如何制作贴花(如何将纹理投影到复杂的几何体?)
【发布时间】:2013-11-09 22:58:25
【问题描述】:

我目前正在开发我的 FPS 游戏并准备制作弹孔(贴花),但谷歌根本没有帮助我。我找不到着色器或任何解释如何的来源。如果有人做过类似的事情,请帮忙。提前致谢。

【问题讨论】:

  • 你不能简单地在模型上刚刚被子弹击中的位置画一个孔贴花纹理吗?
  • 是的,但是当它出现在复杂的几何图形上时看起来不太好。假设我有一个球形模型,弹孔不会在这个模型周围正确弯曲。它只会出现在这个模型的最近点。
  • 看来您需要将子弹纹理合并到模型纹理并重新加载它。但是,不知道这有多贵。
  • 我不知道如何在代码中做到这一点 :))

标签: c# graphics xna shader decal


【解决方案1】:

我认为你在射击时正在投射光线?通过这种方式,您可以检测到它与墙壁碰撞的位置。 如果你还没有这样做,你应该从那里开始。当你知道光线在哪里撞击墙壁时,你可以在几何体顶部创建一个平面,上面有你的弹孔纹理,包括一个 alpha 纹理.

【讨论】:

  • 是的,我有光线和关于位置的一切。但是飞机对我来说不是一个好方法,因为它不会围绕模型弯曲,并且例如当它出现在球体上时看起来很丑。我找到了一个体积贴花着色器的示例here,但仍然没有在 XNA 上实现它。
  • 这会将贴花渲染在一个凸盒上,几乎是一个由内而外的模型。如果您的模型稍微复杂一点,我不希望这会起作用。最好的办法是找到纹理坐标并在模型上混合纹理,但如果纹理/UV 空间重叠,就会出现问题。
  • 我知道仅仅发布一个链接是不合适的 SE 政策,但我没有时间。一个快速的谷歌展示了这个:xbox.create.msdn.com/en-US/education/catalog/sample/… to "access vertex position data from a model"
  • 我现在的最终目标只是找到将执行“混合纹理”的着色器。
  • Riemers 有一个很好的多纹理混合教程,并为您准备好了着色器。 riemers.net/eng/Tutorials/XNA/Csharp/Series4/Multitexturing.php
猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2012-10-30
相关资源
最近更新 更多