最容易做到的不是粘贴整个代码,而是给Babylon.js操场提供了一个链接。如果你不熟悉它,它基本上就像jsfiddle这样的环境,但专门用于Babylon.js webGL渲染。它已经启动了画布,引擎和渲染循环(术语?)
http://www.babylonjs-playground.com/#LYEU3#0
我为3种不同的恒星类型创建了构造函数:YellowStar,WhiteStar和RedStar。我将它们粘贴在游乐场代码中,但在本地,3个函数位于单独的文件中。您会注意到YellowStar的发射粒子没有渲染图像,这很好,因为它与问题无关。前景中较大的白色球体应该是发射红色(RedStar物体)。背景中较小的白色球体(WhiteStar对象)应该是白色的,但是它们的发光属性也不起作用。
我知道它的构造方式存在问题。因为没有那么多共同的属性,我没有设置继承主Star构造函数。传递对象的球体和材质参数会破坏创建构造函数的便利性。但是有些事情我做错了,没有意识到,或者没有考虑到这会使.mat属性不起作用,因此材料不能渲染。我想拥有我的所有物体(最终包括行星),原产地从一个文件。
每次我遇到问题时都无法弄清楚,它通常与范围有关。 WhiteStar和RedStar的材料属性未得到认可。我不明白,因为每个.mat的范围应限制在自己的功能范围内。
var YellowStar = function (position, size, scene) {
this.sphere = BABYLON.Mesh.CreateSphere("sphere1", 30, 30*size, scene);
this.mat = new BABYLON.StandardMaterial("white", scene);
this.mat.diffuseTexture = new BABYLON.Texture("textures/suntexture.jpg", scene);
this.mat.specularColor = new BABYLON.Color3(0, 0, 0);
this.sphere.material = this.mat;
this.sphere.position = position;
/*...this material works...*/
};
var WhiteStar = function(position, size, scene){
this.sphere = BABYLON.Mesh.CreateSphere("whiteStar", 20, 15*size, scene);
this.mat = new BABYLON.StandardMaterial("white", scene);
this.mat.emissiveColor = new BABYLON.Color3(1, 1, 1);
this.sphere.material = this.mat; /* doesn't work */
}
var RedStar = function (position, size, scene) {
this.sphere = BABYLON.Mesh.CreateSphere("redStar", 20, 30*size, scene);
this.mat = new BABYLON.StandardMaterial("red", scene);
this.mat.emissiveColor = new BABYLON.Color3(0.714, 0.239, 0.169);
this.sphere.material = this.mat; /*doesnt work*/
};
巴比伦确实有一个社区,但这些问题更多地与引擎有关,而且我在这里得到了一般性的Javascript问题,我取得了更大的成功。感谢
答案 0 :(得分:1)
在摆弄它之后,看起来你必须在自发光颜色工作之前明确添加/定义漫反射颜色。我不知道为什么。
注意白色星星的发光颜色是白色的,所以我不确定你是怎么知道它是否有效。
HTH