Вместо того, чтобы неудобно вставлять сюда весь код, проще всего дать ссылку на игровую площадку Babylon.js. У него уже запущены холст, движок и цикл рендеринга (срок?)
http://www.babylonjs-playground.com/#LYEU3#0
Я создал конструкторы для трех разных типов звезд: 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*/
};
У Babylon есть сообщество, но вопросы больше касаются движка, и я с большим успехом получаю ответы на общие вопросы по Javascript здесь. Спасибо