【问题标题】:Lighting up object on mouse over鼠标悬停时点亮对象
【发布时间】:2015-04-18 15:57:04
【问题描述】:

我正在尝试在鼠标悬停事件中突出显示游戏中的网格(动画角色等)。 它们有多种纹理,有时还有皮肤。

我想我会将它们包装到 ShaderMaterial 中,并在命中测试时更改制服以使用片段着色器使其变亮。

为此,我可以以某种方式操纵常规阴影吗? 我可以混合多种材质,让我的着色器从标准着色器中获取颜色值并调整它们吗? 还是我需要整个单独的渲染通道并将其与作曲家混合?

或者完全是其他的东西,比如环境光只应用于一个对象/着色器?

感谢您的任何建议。

【问题讨论】:

  • 您可以在鼠标悬停时更改整个材质/着色器,尽管我猜这有点性能密集型,这取决于用户通常执行的开关数量以及您的应用程序的其余部分正在执行的操作。我曾经使用的是常规 phong 材料的发光颜色,例如 material.emissive.setRGB()。这也会给你一些不错的效果。
  • 问题是我正在寻找一种与材料无关的解决方案。我将 phong 材料用于某些对象,而将 lambert 用于其他对象。但我会看看他们是否有共同点我可以修改。感谢您提供一个有趣的想法,它实际上可能是我正在寻找的解决方案。我会告诉你的。
  • 酷,它工作得很好,两种材质,甚至纹理。所以我猜你搞定了。 :) 非常感谢。在这里你可以看到结果:eskel.cz/preview/Lighten
  • @GuyGood 请将其作为答案发布,我会将其标记为正确。
  • 我唯一遇到的问题是我必须为每个对象克隆该材料,否则我会立即更改它。而且由于我正在做类似体素引擎的事情,这意味着数百个材质克隆(具有多个纹理贴图)来更改一个属性。 :(

标签: three.js


【解决方案1】:

转贴,详情见cmets/讨论:

“您可以在鼠标悬停时更改整个材质/着色器,尽管我猜这有点性能密集型,具体取决于用户通常执行的切换次数以及您的应用程序的其余部分正在执行的操作。我曾经使用过的是例如,使用 material.emissive.setRGB() 的常规 phong 材质的自发光颜色。这也会给你一些不错的效果。

【讨论】:

    【解决方案2】:

    有一些这样的例子,你可能可以从中学到很多东西。看看他们的来源:

    【讨论】:

    • 感谢您发布此内容,我错过了第一个。无论如何,我们想出了一些非常相似的东西,更新材料的发射值,而不是基色。 (使其与纹理一起使用)
    【解决方案3】:

    除了 GuyGood 所说的,如果你确实决定在你的材料上使用 .setRGB(),你需要使用 Red Green B范围从01,如Three.js Documentation 中所述

    或者,如果您愿意,像我一样,.setHex() 函数也存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2013-12-03
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多