论坛

由用户创建的信息 Ivan Lyubovnikov
09 November 2016 14:16
Есть какая-то приоритетность вывода текстур "одна закрывает другую"?
Приоритета нет, попробуйте протестировать замену на одном объекте, конкретно на том, где сейчас не работает.
Ещё вопрос: какая версия движка? Не так давно мы исправляли поведение этой функции, поэтому стоит обновиться, если версия совсем старая.
09 November 2016 11:12
Вылез глюк по замене картинки из текстур. Половина картинок меняется, половина нет. Фотки прилагаю. Прошу помочь разобраться в этом.
А как конкретно делаете смену? В консоли ошибок нет?
09 November 2016 11:09
Вообще, функция после исполнения где переменные хранит? Как переменную можно раскопать в консоли и посмотреть к какой функции она относится?
это уже сложнее, если просто нужно посмотреть значение переменной, то можно либо через console.log() её вывести, либо навесить на глоб. объект window, например:
var test = 0;
...
window.test = test;

тогда сможете в консоли просто набирать window.test и увидите значение
09 November 2016 11:00
Подскажите, если я во входные парламенты функции вставляю ch_tex, то у меня при вызове функции значения не меняются, а значит туда передается значение, назначенное при определении переменной. А как это может быть, если у меня эта функция вызывается из другого файла? Или при вызове через exports читается все, что написано до определения функции - все переменные, пути и т.д. и подхватывается значение  ch_tex = 0????
exports тут не при чем, так работает javascript. Переменная ch_tex у вас обявлена в т.н. "глобальной области видимости", т.е. будет видна внутри там же функции. Если объявить переменную с тем же именем в самой функции или передать параметр с таким же именем, то он как бы перезатрет глоб. переменную.
Если кратко, области видимости бывают вложенные, т.е:
(глобальная обл. ( обл. функции ) )
При использовании переменной, она сначала ищется в текущей области, если объявление не находится, то ищем выше и т.д., поэтому глобальная переменная ch_tex в вашем примере становится видна.
09 November 2016 10:42
это речь идет о module.exports? несколько такого рода переменных в одном модуле можно применять, например:
module.exports = 123
module.exports = 456
module.exports = 789
??

И если я делаю var odin_dva_tri = require(./file), то будет ли конфликт между ними?
не, немного не то
я о том, что если в том же примере использовать объект, то обе переменные будут ссылаться на него:
var APP_ASSETS_PATH = exports.APP_ASSETS_PATH = { test: 0 };
APP_ASSETS_PATH.test = 1;
console.log(APP_ASSETS_PATH.test, exports.APP_ASSETS_PATH.test); // выдаст 1 1


А module.exports так не надо использовать - это объект, содержащий объявления, доступные извне. Его нужно применять только внутри своего же модуля, чтобы вывести наружу методы или переменные. Если потом будете загружать этот модуль через require, то вернется как раз его объект exports.
Например:
b4w.register("module1", function(exports, require) {
exports.odin = 3;
exports.dva = 2;
exports.tri = 1;
});

b4w.register("module2", function(exports, require) {
var m1 = require("module1");
console.log(m1); // выдаст: Object {odin: 3, dva: 2, tri: 1}
});
08 November 2016 19:25
несвязанных
можно сделать, чтобы они были связаны, т.е. изменялись по ссылке, но это будет работать не со всеми типами данных; впрочем, это уже нюансы языка
08 November 2016 18:45
а если у меня получилось просто exports.a = '123' и потом под console.log(m_amave.a) она воспроизводится, то есть без var
не совсем понял, лучше кодом напишите, как это все будет выглядеть, или пример того, чего хотите добиться

В строчке происходит объявление 2-х несвязанных переменных с одинаковым значением, т.е. изменение одной не отразится на другой, если вы об этом.
08 November 2016 17:23
А в одну строку применительно в переменной как это сделать?
вот так, например:

var APP_ASSETS_PATH = exports.APP_ASSETS_PATH = 0;
08 November 2016 16:46
Прошу уточнить, если переменная, например APP_ASSETS_PATH определена в основном модуле js, а я хочу использовать её в другом модуле и функции - как мне её вытащить или найти в пространстве имен? Я проверил, ни в document ни в b4w ссылки на нее нет.
Чтобы переменную или метод можно было использовать за пределами модуля, нужно определить её через объект exports:
b4w.register("my_module", function(exports, require) {
...
exports.APP_ASSETS_PATH = ...
...
});


Использовать можно будет так:
var mod = require("my_module");
console.log(mod.APP_ASSETS_PATH);
08 November 2016 13:14
В мануале, конечно написано, что падает производительность, но я не ожидал что на столько. С 60 до 8 фпс.
Слишком сильно падает, вроде, не должно быть такого. Всего 11 анкоров на простой сцене? А в каком браузере смотрели? И какие у вас GPU/CPU?

Абсолютно не представляю как вы реализовали функцию определения видимости (т.е. не могу представить где там узкое место), но обозначу как мне кажется простой алгоритм вычисления их видимости.
Не, там просто происходит рендеринг анкоров как точек некого размера с учетом глубины приходящей с основной отрендеренной сцены. Соответственно, те анкоры, которые расположены за объектами не проходят тест глубины и не рендерятся. Время на их рендеринг мало и не имеет значения.
А вот дальше происходит чтение из отрендеренного фреймбуфера по координатам анкора, где мы смотрим на значение пикселей. Если анкор был отрисован, значит не отсекся по глубине, значит виден. Чтение из фреймбуфера здесь - самая затратная операция, но насколько она "тормозная", зависит от конкретного железа.