Three.js - 发光的球体

时间:2013-05-03 13:25:02

标签: javascript three.js geometry light

我有问题。我想制作一个像光源(太阳)一样工作的球体。我发现meshPhongMaterialemissive: colorshininess: intensity这样的选项,但我没有设法对太阳进行编码。有谁知道怎么做?谢谢你的回答!

3 个答案:

答案 0 :(得分:16)

如果您想创建一种发光效果,我在http://stemkoski.github.io/Three.js/上写了一些可能有帮助的例子,包括:

http://stemkoski.github.io/Three.js/Selective-Glow.html
随附博客文章 http://stemkoski.blogspot.com/2013/03/using-shaders-and-selective-glow.html

以及更具大气风格的发光效果

http://stemkoski.github.io/Three.js/Atmosphere.html

http://stemkoski.github.io/Three.js/Shader-Halo.html

希望这有帮助!

答案 1 :(得分:2)

由于您没有具体问题,我无法给您一个具体的答案。你似乎有点失落,所以这就是你可能会遗漏的东西:为了让某些东西看起来像光源,它必须做两件事:

  1. 照亮:您可以通过在其中创建一个新的Light对象来实现此目的。将对象和光源放在新的THREE.Object3D中是个好主意。
  2. 发光:您需要创建一个着色器来遮挡该对象周围的像素。我在这里找到了一个针对three.js的教程:Three.js glow tutorial
  3. 您可以尝试更多高级技巧,例如添加godrays

    祝你好运。

答案 2 :(得分:2)

meshPhong材质具有参数'emissive'和'shininess',它们会影响材质着色器中的计算,但这些参数不会产生您想要的效果,它们仅用于计算最终颜色。

例如,您可以将聚光灯放在球体的确切位置,这样可以减轻周围的物体。但是,如果要实现发光球体的效果,则必须编写后处理着色器:

  • 将球体渲染为帧缓冲区1。
  • 将相同的球体颜色为黄色(或其他一些亮色)渲染到帧缓冲区2。
  • 将帧缓冲区2中的内容模糊为后处理效果。
  • 将原始图像(帧缓冲区1)和模糊的帧缓冲区2混合在一起以生成最终图像。

此外,一些示例不使用实际的后处理来实现发光,但它们使用技巧。

渲染球体,然后在背面渲染一些带有“发光光环”纹理的四边形。 访问:http://threegraphs.com/charts/sample/world/,了解如何模拟发光并在球体周围创建类似日食的圆圈。