Форум

Сообщения, созданные пользователем Дмитрий Пелевин
12 мая 2017 10:26
Здравствуйте ещё раз)

Самый первый и главный совет, не называйте переменные по русски… iacor - eto adiwe)

Универсальное решение:


Немного хаотично вы спросили, старайтесь разделять вопрос на логические части) Так и ответить проще будет)
То что вы говорите:

мы указываем ИД конваса в который мы будем прогружать 3д сцену.

неверно. Мы указываем Id контейнера, где будет автоматически создан канвас. Поле объекта так и названо canvas_container_id.

В данном случае, вам достаточно вместо idName просто указать "iacor1" (о боги, переименуйте его).

Хотя вроде как вопрос про отображение кастомных кусков контента рядом с объектами в сцене… Тогда читайте тут, остальное непонятно)
12 мая 2017 10:14
Ну можно либо в самом (внутри) canvas2 прописать логику, что если произошёл клик по тому то элементу, то я сам себя удаляю.

Либо можно обратиться к нему напрямую, т.к. вызов b4w.require("canvas2","canvas2") возвращает вам объект того самого модуля. Внутри модуля создаете функцию (сейчас там уже есть init() И она же вызывается при создании), например terminate(), в ней прописываете m_data.cleanup() и потом примерно так:
var someModule = b4w.require("canvas2","canvas2");
someModule.init();

$(".button").click(function(){
    someModule.terminate();
    someModule = null;
});


Стоит быть аккуратным и самому контролировать объекты (модули), которые вы уже удалили. Стоит делать на них ссылки = null и постараться не обращаться к ним хаотично из глобального неймспейса (window).
10 мая 2017 09:32
поможет ?
Поможет, но данные сначала надо в нём удалить:
m_data.unload();

Но, если не связаны, то лучше делать через IFRAME обычным методом. Оптимальнее будет.
Вы имеете ввиду unload метод? Он как раз удаляет все ссылки на объекты сцены, отдавая их сборщику мусора. Именно сцены. Namespace имеет отношение к модулям движка
Ну не сам unload, его реализация это лишь m_data.cleanup() (глянул в API, оказалось это одна и та же функция….).
Из неё то понятно, что физически дропаются все данные.

А вот с неймспейсом я вас не понял… То что он имеет отношение к модулям движка тоже ясно, но эти модули же создают свой инстанс для каждого неймспейса. И по факту сборщик мусора бы до них добрался, если бы ссылок не было (да, ссылки все стираются при вызове b4w.cleanup(moduleId, namespaceName);)б но при использовании нескольких канвасов на странице весь сок в их взаимодействии (а зачем ещё?). И тогда получается у нас полюбому будут ссылки на удаляемые канвасы (объекты, неймспейсы, как угодно можно назвать) в модулях других сцен….

Но тут конечно нельзя сказать, как правильно на самом деле. Задача не тривиальная и движок не для таких целей спроектирован. Так что кто как хочет так и будет извращаться) Да и по факту объекты весить много не должны, так что это уже паранойя какая-то)
08 мая 2017 18:49
Ответ на сообщение пользователя Gogarian
Ага именно последнее отключить после запуска.
Суть в том что мы открыли какой-то 3д контент, покрутили потыкали круто, надоел он нам, мы закрыли его, и открыли другой.

закрыть то ладно я могу удалить элемент из ДОМ дерева, но грузить то он от этого не перестанет. вот мне интересно как отключить .init чтобы не грузить систему

Короче, почитал я статью, поднял проект, потестировал….
Для выключения работы всей сцены используется метод:
m_data.unload();

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

Для примера в тестовых сценах можно добавить его вместо всего кода в функции:
exports.ext_method = function() {
    if(m_scs.get_scenes().length > 0){
        m_data.unload();
    }
}

В этом случае при клике на втором канвасе, первый умрёт.
Но дальше вопрос, как на самом деле контролировать, что сцены уже выгружены.
Я проверяю, что есть сцены, но может это заблуждение…. Можно подключить модуль лоадера, к примеру и проверять шедулер на null… В общем есть много мест, которые можно проверить.

Но по факту это лишь отключает механизмы, с которыми работает движок модулями в определённом неймспейсе. В теории было бы круто ещё удалить все объекты, которые этому неймспейсу принадлежат (сборка мусора, все дела), но в JS это всегда больная тема… Может разработчики чего скажут интересного.

Нашёл ещё доп метод ,благодаря которому можно отлинковать созданный в каком-либо неймспейсе модуль от основного модуля движка b4w:
b4w.cleanup("canvas1","canvas1");


Это позволит сборщику мусора его удалить, если конечно кто-то ещё не ссылается на этот модуль. Но проблема в том, что на этот модуль уже ссылка есть в canvas2:
var m_ext_canv  = b4w.require("canvas1", "canvas1");


В любом случае вопрос открыт и нет единого метода для удаления аппликейшена (в теории это в модуле APP должен быть метод типа terminate()) и всех связанных с ним доп ресурсов.
08 мая 2017 14:59
Вы хотите отключить его после запуска, или не включать вообще?

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

А чтобы отключить его после запуска, я не нашёл метода… Самому инетресно. Также как и понять, как работают две сцены одновременно.
08 мая 2017 01:02
Ответ на сообщение пользователя Bellski
Скажите пожалуйста, планируется ли поддержка Glossy BSDF Roughness ? Может сейчас есть какой нибудь обходной путь ? Я пытаюсь сделать PBR материал.

Вроде как сейчас активно ведется работа над PBR материалами, но я вот лично не понял, они уже есть, или только в ближайших планах)
07 мая 2017 12:47
Вот их сайт

Что думаете об этом? (я ещё не смотрел, тока новость увидел о них)
07 мая 2017 12:28
Ну во первых спасибо за отлично проведённое время и такую гору крутой информации)
Отдельный привет Нодовому Архимагу :D

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

Меня в частности очень заинтересовал проект про LEGO, хоть я ничего и не понял толком… ))))
Моим детям эта тема особенно будет интересна, а если есть какой-то проект в интернете, где можно что-то пособирать, то вообще космос.

Также было нереально интересно слушать про историю блендера! Пабло очень харизматичный и очень круто рассказывал обо всём, хотя в какой-то момент я упустил нить и так и не понял, собрали они 100к евро за 7 дней (или недель, забыл…) или нет? =)

Если что, могу помочь с написанием этой самой статьи в событиях, но мне бы знать данные или источники.
04 мая 2017 21:49
Для новичков самое оно!)
29 апреля 2017 01:09
а есть там "Куча настроек" ? и нужно видеть как оно будет, что ухудшится итд?
К сожалению там ничего этого нет)) Всё на добром слове работает :D