论坛

由用户创建的信息 dal
23 February 2018 11:05
dal
Еще вопрос, понимая логику API… В JS как мы обращаемся к объекту? Например у меня в сцене есть меш с именем cube. Как мне его потрогать из JS? Если можно, то буду благодарен за пример простой конструкции с пояснениями. Спасибо
Если хотите потрогать из консоли, то для этого создается глобальный объект b4w. Должно выглядеть примерно так:
b4w.scenes.get_object_by_name("cube")


В коде это лучше всего делать через require. Посмотрите как это делается в приложении simple_app, поставляемом в sdk.


Любопытно, где можно узнать об этом подробнее?
есть несколько уроков, но по-моему только на английском.
Выступление с B4W конференции: https://www.youtube.com/watch?v=dWEHg5Yzcys&feature=youtu.be&t=1113
API: https://www.blend4web.com/api_doc/module-logic_nodes.html#.append_custom_callback
Статья на русском: https://www.blend4web.com/ru/community/article/352/
Урок на английском: https://www.youtube.com/watch?v=xSMShlFXAu0
Alexander (Blend4Web Team)
22 February 2018 14:33
dal
The application uses solar.patt, generated with mk_patt. See https://archive.artoolkit.org/documentation/doku.php?id=3_Marker_Training:marker_training
We are using ARToolKit.js without any blend4web specific.
Alexander (Blend4Web Team)
20 February 2018 12:14
dal
I don't really get what you mean with using b4w.register incorrectly.

In your example b4w.register is called in the click handler, but b4w.register should be called just once for registering the module which then can be received using b4w.require.

If you will attach a simple project, it will help to understand the issue deeper.
Alexander (Blend4Web Team)
20 February 2018 10:24
dal
See this topic. Follow the link and try the attached project. For your case you can write a similar project and ask your artists to export their models into json. The bahavior of logic nodes will be the same. Or you can patch a webplayer and src/intern/logic_nodes.js to replace the behavior of "Page Redirect" node. In your place I would choose the first solution because in this case you don't have to patch the core and the synchronization process between you and artists would be more easier.
Alexander (Blend4Web Team)
20 February 2018 09:21
dal
WebAssembly is fairly new technology and it seems that it has some restrictions in implementation on ios. We have added a task to investigate the issue to our TODO list.
Alexander (Blend4Web Team)
19 February 2018 15:40
dal
Hi!
Try to pass physics_use_wasm: false in app.init function. This will disable WebAssembly and will use ASM.js for uranium instead. Check whether the error still occurs.
Alexander (Blend4Web Team)
19 February 2018 14:15
dal
Если у вас что-то вроде:
  m_data.load( APP_ASSETS_PATH+"scena1.json", load_cb, preloader_cb, true, false);
  m_data.load( APP_ASSETS_PATH+"scena2.json", load_cb, preloader_cb, true, false);
  m_data.load( APP_ASSETS_PATH+"scena3.json", load_cb, preloader_cb, true, false);
  console.log("hello")


То, действительно, сначала выведется "hello", а потом все остальное. Такова природа асинхронности в Javascript: при вызове m_data.load происходит "добавление задачи в очередь" и передается управление следующей инструкции. Эта очередь частично "разгребается" на новой итерации асинхронного выполнения. wait_complete_loading ни в коем случае не превращает m_data.load из асинхронной в синхронную. Эта опция, как я уже сказал, позволяет вызвать load_cb раньше чем загрузятся все ресурсы. Ресурсы также загружаются асинхронно. Если бы функция m_data.load была синхронной, то страница просто зависала бы на момент загрузки больших сцен и браузер сообщал бы, что страница не отвечает. Асинхронность использована для того, чтобы загружать данные частями.

Тем не менее, в движке есть недоработка, связанная с тем, что при параллельной загрузке могут возникать конфликты. Поэтому рекомендуется вызывать m_data.load после того, как предыдущие данные были загружены, например по цепочке, в каждом load_cb. Прикрепляю пример.
Alexander (Blend4Web Team)
19 February 2018 12:37
dal
Alexander (Blend4Web Team)
19 February 2018 12:12
dal
Здравствуйте!

ВОПРОС: почему же не ищутся объекты?
У вас один и тот же load_cb на все сцены. Он будет вызываться три раза, каждый раз когда загрузится одна из трех сцен. Скорее всего при первом вызове загрузилась сцена, в которой еще нет нужного объекта. Лучше создать отдельный коллбэк для каждого случая, чтобы точно знать, какие данные были только что загружены.

вопрос2: почему не отрабатывает ожидание полной загрузки?
load(path, loaded_cb(opt), stageload_cb(opt), wait_complete_loading(opt), load_hidden(opt)) → {number}
Каким образом это проявляется? wait_complete_loading говорит движку загрузить все, не исключая определенные этапы, которые могут быть догружены позже (они объявлены внутри движка). Это относится к данным, связанным с json, указанным конкретно в этом вызове load в параметре path и никак не связано с остальными json-файлами.
Alexander (Blend4Web Team)
16 February 2018 20:02
dal
Im not sure what else to do here because i dont have knowledge enough to apply the patch and build blender back up….so I was wondering if you have a blender version with this patch applied already.

That patch was not for blender it was for blend4web. If you are using SDK you can apply this changes on the sources which you can find in path_to_sdk/src. Anyway In you logic node configuration you will not have the issue which I've described recently.

I've attached the solution for you.

Green frame is fully working in Blend4Web 17.12.

Your main mistake caused by the fact that when you are calling the "Transform Object" node, you are setting all listed parameters x, y, z, rotation, scale. That's why your sphere teleported. By the way for smooth transition use the duration parameter.

Remove all nodes in purple frame if you have not applied the patch.
The solution in purple frame uses functions, so you can call such functions just by passing required parameters.
Alexander (Blend4Web Team)