12

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

4

3 回答 3

24

如果您正在寻找创建发光风格的效果,我在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

希望这可以帮助!

于 2013-06-11T16:42:04.773 回答
2

由于您没有具体的问题,我无法给您具体的答案。不过,您似乎有点迷茫,因此您可能会缺少以下内容:为了使某物看起来像光源,它必须做两件事:

  1. 照亮:您可以通过在其中创建一个新的 Light 对象来实现此目的。将您的对象和灯光都放在一个新的 THREE.Object3D 中是个好主意。
  2. 发光:您需要创建一个着色器来模糊该对象周围的像素。我在这里为您找到了专门针对three.js 的教程:Three.js 发光教程

您可以尝试更高级的技术,例如添加Godrays

祝你好运。

于 2013-05-03T15:55:16.750 回答
2

meshPhong 材质具有影响材质着色器内计算的参数“发射”和“光泽”,但这些参数不会给您想要的效果,它们仅用于计算最终颜色。

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

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

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

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

于 2013-05-04T16:20:32.810 回答