论坛

由用户创建的信息 dal
08 March 2018 00:15
dal
При нажатии некоторых кнопок должна происходить замена скриптов, вследствие чего происходит замена и самой модели.

Т.е. вы динамически меняете тег script? Если ваш скрипт использует нотацию require и не указано вторым параметром специфичное для b4w так называемое пространство имен (namespace), то новый скрипт будет конфликтовать со старым. Для разрешения конфликта нужно использовать разные нэймспейсы. Однако обычно нэймспейсы используются, если например нужно на одной странице запустить несколько копий движка.
Для вашего же случая, насколько я понимаю, копий движка не требуется, а нужно просто по запросу загружать различные сцены. В таком случае лучше использовать функции load и unload модуля data. Правда если сцены у вас сильно отличаются по нагруженности эффектами, то некоторые объекты могут отображаться неправильно, мы сейчас работаем над этой проблемой.
Alexander (Blend4Web Team)
07 March 2018 01:25
dal
I've created the project which can help you, I guess. See attachment. Just import it using Project Manager.
My steps:
1) the javascript code of project with sliders is keept unmodified (it was created from codesnippets with "Make Project" button)
2) I've created a blend file with logic nodes (lnodes.blend). It works as pure logic nodes project
3) I've opened morph.blend and linked B4WLogicNodeTree and Cube from lnodes.blend
4) I've enabled Logic Editor and selected B4WLogicNodeTree in Active Node Tree field
5) reexported json
6) run the project and checked that all works
Alexander (Blend4Web Team)
07 March 2018 00:54
dal
My help can be very fast if you will attach the full sources. Otherwise I have to guess everytime. If you have something secret in your blend file, you can strip it - just keep the simplified objects which are used in the code.
Alexander (Blend4Web Team)
07 March 2018 00:13
dal
поскольку ссылка "project" является неперевариваемым параметром из за ошибки описанной выше (поскольку сам скрипт не работает корректно, ошибку видно только при отладке
Менеджер проектов не будет работать ни через какие сторонние серверы, потому что он имеет логику которая не реализована нигде, только на серверной стороне, написанной на питоне и стартующей при запуске блендера. Вы можете запустить менеджер проектов вручную командой
python3 scripts/project_server.py 

находясь в корне sdk.
Только предварительно установите python версии 3.5 или выше.
На windows это будет что-то вроде:
python.exe scripts\project_server.py

Другой через сервис блендера http://localhost:6687/project/ (который работает только при рабочем блендере). в котором при попытке создать, импоритровать или экспортировать проект пишется "Server busy" в окне браузера.
"Server busy" может писать если вы импортируете довольно большой проект. Вы долго ждали? В любом случае хорошо было бы посмотреть что выводит в консоль blender, либо команда упомянутая выше когда выводится "Server busy" .
Alexander (Blend4Web Team)
06 March 2018 23:56
dal
Alexander (Blend4Web Team)
06 March 2018 23:53
dal
Скорее всего вы используете m_cfg.get_assets_path. Эта функция возвращает пути, завязанные на структуру SDK. Я так понимаю, что вы используете Blend4Web без SDK. В таком случае не рекомендуется использовать эту функцию. Посмотрите как это сделано здесь.
Alexander (Blend4Web Team)
06 March 2018 23:43
dal
да как раз, по той теме, похоже это то что надо! Только как скопировать параметры?, которые нужны для
https://www.blend4web.com/api_doc/module-camera.html#.set_projection изменения проекции
а именно матрицу: эти самые параметры ortho(left, right, bottom, top, near, far, out) → {Mat4}
https://www.blend4web.com/api_doc/module-mat4.html#.ortho
например с уже существующей(второй камеры которая установлена как надо)

ну и конечно нужно сохранить проекцию прошлой камеры чтоб вернуть на место все?

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


ДОКУМЕНТАЦИЯ: тот самый параметр OUT в описании модуля MAT4 не обозначен, как опциональный, так же как в описании других модулей, но по факту, как я понимаю, это именно так. Данные возвращаются функцией и плюсом в параметр OUT ! кроме этого описано что возвращается МАТ4 матрица, она же массив Float32Array , но когда смотрим описание https://www.blend4web.com/api_doc/module-camera.html#.set_projection не видим MAT4 в описании .. а только массив .
Не так. out параметр обязателен в конкретно этой функции. Он используется в качестве буфера, в который будет записано возвращаемое значение. Все модули используют подобный подход, который позволяет переиспользовать память, а не выделять ее каждый раз.

Дополню: пытаюсь подгрузить в основной сцене и вторую камеру ортогональную из которой скопировать нужные параметры, как говорилось выше, но не тут то было .. похоже, что при загрузке загружает только одну камеру, что выбрана как активная в сцене, верно? т.к. второй камеры в списке загруженных объектов просто нет …
Как я уже сказал, она загружается как обычный объект. Найти ее можно при помощи get_object_by_name итп.
Alexander (Blend4Web Team)
06 March 2018 00:01
dal
Поскольку из индекса менеджер проектов не запускается, (ошибка указанна выше) что именно нужно настроить я так и не понял. А из блендера при создании проекта при помощи менеджера пишет, что сервер занят и проект создать не получается.
Вот тут надо подробнее разобраться. Все должно работать. Менеджер проектов по умолчанию доступен по адресу http://localhost:6687/project/.
Если вы говорите про ошибку
"Uncaught TypeError: Failed to resolve module specifier "blend4web". Relative references must start with either "/", "./", or "../"."

то это больше похоже на попытку открытия страницы в обход менеджера проектов.
Давайте все-таки разберемся, работает Менеджер проектов или нет.

Насчет ручной сборки рекомендую ознакомиться с вводной статьей по npm. Там рассматривается проект, использующий уже собранный движок. Также можете ознакомьтесь с стартовым проектом, который сделал один из наших пользователей. В нем используются ES6 модули а также обфускация при помощи uglifyjs.
Alexander (Blend4Web Team)
05 March 2018 23:34
dal
1. Тут возник еще один вопрос, на сколько я вижу(искал в API) нет возможности изменить активную камеру в сцене с несколькими камерами?
Нельзя. Но можно копировать положение камер, правда вручную.

2. Не могу найти способ создать ортогональную камеру или изменить текущую на ортогональную. может не нашел метод, подскажите.
Вопрос обсуждался здесь. По нему пока ничего не изменилось.
Alexander (Blend4Web Team)
05 March 2018 23:10
dal
Поправил
Alexander (Blend4Web Team)