2013-04-29 3220 views
22

我建立某种行星系统的three.js所我花了几个小时寻找一个体面的解决方案,以得到外发光在一个地球 - 与纹理的球体对象。three.js球形物体的外部发光?

我遇到了这个例子http://stemkoski.github.io/Three.js/Selective-Glow.html哪种做的窍门,但事情是 - 这种形式的辉光也影响导致颜色变化的主要3D对象(见那里)。

另一个不错的发光示例可以在这里找到http://bkcore.com/blog/3d/webgl-three-js-animated-selective-glow.html但它再次发光的整个地区,不仅“外”的事情。

我一直在阅读一些关于GitHub上的“overrideMaterial”属性的讨论帖,但这似乎是实验性的,未使用的和未记录的......甚至不知道这是否能解决我的问题。

请分享您的想法,谢谢!

+0

你可以发布一个链接到“overrideMaterial”话题,好吗? – 2013-04-29 01:05:36

+0

由于我是新用户,因此不允许发布超过2个链接。 :) https://github.com/mrdoob/three.js/issues/265 – kyeno 2013-04-29 01:29:41

+1

看到这个相关的问题:http://stackoverflow.com/questions/10213361/how-can-i-render-an-atmosphere-过度渲染三合一js – WestLangley 2013-04-29 02:19:55

回答

37

我在分离出产生大气效应的WebGL Globe代码部分(链接到上面)方面做了一些工作。初步工作版本是在这里:

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

尽我的理解,也有一些有趣的事情在原代码继续创建大气效果。首先,发光的纹理被放置在另一个球体上 - 我们称之为Atmo Sphere :) - 它围绕球体上的地球图像。大气层材料被翻转过来,使得正面不会渲染,只有背面,因此它不会遮挡地球,即使它围绕它。其次,渐变光照效果是通过使用片段着色器而不是纹理来实现的。但是,如果您放大或缩小,气氛将会改变其外观;这在WebGL Globe实验中并不明显,因为缩放已被禁用。

[更新4月30日]

接着,从

http://stemkoski.github.io/Three.js/Selective-Glow.html

与梯度照明纹理(和另一个黑色纹理球体)球体类似于源代码被放置在第二场景,然后使用添加剂搅拌器将该场景的结果与原始场景合成。只要您可以尝试用于创建发光效果的参数,我已经包含了几个滑块,以便您可以更改这些值并查看所产生的不同发光效果。

我希望这可以帮助您开始。祝你好运!

[更新6月11日]

我有达到同样的效果在简单的方法,而不是使用后处理和加法混合两个场景一个新的例子,我只是改变了一些参数在定制材料中。 (回想起来似乎很明显。)对于一个更新的例子,请上网:

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

还是没虽然想出平移/缩放问题。

[更新7月24日]

我想通了平移/缩放问题。它需要使用着色器;有关复杂性的详细信息,请参阅相关问题Three.js - shader code for halo effect, normals need transformation,最后的工作示例请参阅:

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

我最终的结果很高兴,所以我不会被更新此回答任何:)

+1

好一个李!看起来很有趣!简直不敢相信你花了这么多时间来解决这个问题,非常感谢!现在去看看它。我欠你:) – kyeno 2013-05-01 13:57:22

+1

有一件事,如果我可以建议你(我还需要实施自己的东西)。这对于这个例子或任何东西来说都不是至关重要的,但是你的浏览器调整大小的事件并不适应那里的Atmo Sphere。 :) – kyeno 2013-05-01 14:00:24

+1

Proszęuprzejmy,kyeno - 这是一个有趣的问题,我一直在努力工作一段时间。你是对的浏览器调整大小问题,我使用THREEx.WindowResize(renderer, camera)来处理,并需要设置类似的二次场景与发光效果。如果你觉得你“欠我”,你可以通过帮助其他人用three.js标签问问题来付出代价......而且,没有什么比起赞扬者说的“谢谢”:D – 2013-05-01 14:46:52

1

在您提到的示例中,我使用了一种蓝色发光与添加剂混合 - 如果您使用了白色,也许会产生所需的效果。

+0

感谢您的回复!我试过 - 白色仍然影响原始图像。我将在一秒内发布我的代码 – kyeno 2013-04-29 01:06:23

+1

好吧,我只渲染主渲染器的第一个示例,单遍: http://matt.prayam.com/private/planet3d/ 第二个示例,我在哪里使用你的方法,使用作曲者渲染多遍: http://matt.prayam.com/private/planet3d/white.html 唯一的区别是在'onRenderLoop'回调 – kyeno 2013-04-29 01:27:07