Свойства конструктора JavaScript не распознаются — Babylon.js

Вместо того, чтобы неудобно вставлять сюда весь код, проще всего дать ссылку на игровую площадку 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 здесь. Спасибо


person gson78    schedule 12.09.2016    source источник


Ответы (1)


После того, как вы повозились с ним, похоже, что вам нужно явно добавить/определить диффузный цвет, прежде чем заработает испускаемый цвет. Я не знаю почему.

NB Излучающий цвет белой звезды полностью белый, поэтому я не уверен, как вы узнаете, работает он или нет.

ХТН

person CarlBateman    schedule 13.09.2016
comment
Хорошо, это было освещение все время! Тогда мне пришло в голову, что я подумал... нет... Освещение было слишком сильным... грр, по крайней мере, мои объекты хороши html5gamedevs.com/topic/25141-emissive-material-not-rendering/ - person gson78; 13.09.2016