我正在制作一个Three.js场景,其中有星星对象,我希望能够使它们“发光”。
通过发光,我的意思是使它们真正发光,而不仅仅是在它们周围施加“光晕”效果。
我试图将PointLight
对象放置在与恒星相同的位置,这会使该对象发出光,但是如您所见,它不会使该对象“发光”,从而产生怪异的效果。
我当前的代码如下:
class Marker extends THREE.Object3D {
constructor() {
super();
// load obj model
const loader = new OBJLoader();
loader.load(
"https://supersecretdomain.com/star.obj",
object => {
object.traverse(child => {
if (child instanceof THREE.Mesh) {
// child.material.map = texture;
child.material = new THREE.MeshLambertMaterial({
color: 0xffff00
});
child.scale.set(0.01, 0.01, 0.01);
}
});
this.add(object);
}
);
const light = new THREE.PointLight(0xffff00, 0.5, 5);
this.add(light);
}
}
关于如何执行此操作的任何想法? ;)
答案 0 :(得分:3)
为恒星添加点光源是使其他物体受到其光影响的正确方法。为了使星星本身发光,可以将材质的emissive
颜色设置为黑色以外的颜色(为达到最佳效果,您可能希望它与灯光具有相同的颜色)。
答案 1 :(得分:1)
除了设置灯光和设置材质的发射特性外,如上文Jave所述。
您可能想研究三个后处理示例。.特别是虚幻Bloom传递...如果您能使它起作用,那么它确实可以卖出效果。
https://threejs.org/examples/webgl_postprocessing_unreal_bloom.html
注意高光发光实际上是如何渗入物体周围的场景中的...