Сообщения, созданные пользователем Mousecach
12 марта 2018 18:50
Ответ на сообщение пользователя Александр РомановСпасибо огромное, всё работает как и планировалось!)
В вашем примере на кубике стоит галочка "Apply Scale And Modifiers". С ней все модификаторы в том числе и Armature применяется, и экспортированный меш является уже не заскиненным. Подумаем, что можно сделать, чтобы защитить от таких проблем пользователей.
12 марта 2018 18:49
Ответ на сообщение пользователя Александр РомановАлександр, спасибо большое! Моя вина. не увидел Вашего ответа, а в прошлый раз не поставил галочку, чтобы следить за темой. Впредь такой ошибки не повторю. Да, спасибо, всё работает как надо!
А вот этот ответ не помог?

Прошу удалить эту или ту тему на усмотрение администрации
08 марта 2018 23:05
Всем доброго времени суток! Задался целью подвигать немного кости у моего свеже созданного кубика. А если быть точнее, то одну, да причём подвигать из html кнопки.
![]()
![]()
Ничего воде бы, не предвещало беды, изучил Bone API, для более точного решения посмотрел код в Code Snippets и выдал вот такой вот код:
От стандартного отличается лишь тем, что добавлен обработчик событий на кнопку, созданную в htlm (да, обработчик работает). И… ничего. Т.е., бедная несчастная кость не двигается вовсе. Пробовал даже функцию m_armature.set_bone_tsr(), результат аналогичный.
Думаю, мб что не не так сделал. Мб что пропустил… Скопировал проект из Code Snippets и давай его уменьшать до задачи, что выше описана. Получилось нечто подобное:
И в принципе, логика одинаковая, да только модуля инпут давным давно не было, поэтому пришлось делать кнопку более экстравагантным путём. Но внезапно этот код работает. Т.е., прям как надо. Персонаж двигает правой рукой и всё хорошо. Ну, как двигает, просто меняет положение от максимального до минимального, но это и есть решение той задачи что я себе поставил.
К сожалению, понять ПОЧЕМУ у меня не двигается верхняя часть кубика (аля сундук) я не смог и искренне прошу Вашей помощи в решении данной задачи. Грешу пока только на обновлённую версию движка. Ибо по настройкам я для рига и костей всё проверил, всё одинаковое. Уже ума не приложу, почему оно не работает(


Ничего воде бы, не предвещало беды, изучил Bone API, для более точного решения посмотрел код в Code Snippets и выдал вот такой вот код:
"use strict"
// register the application module
b4w.register("TEST_main", function(exports, require) {
// import modules used by the app
var m_app = require("app");
var m_cfg = require("config");
var m_data = require("data");
var m_preloader = require("preloader");
var m_ver = require("version");
var m_input = require("input");
var m_armature = require("armature");
var m_tsr = require("tsr");
var m_scene = require("scenes");
// detect application mode
var DEBUG = (m_ver.type() == "DEBUG");
// automatically detect assets path
var APP_ASSETS_PATH = m_cfg.get_assets_path("TEST");
//Custom variables
var boxIsOpen = false;
var final_tsr = new Float32Array(8);
/**
* export the method to initialize the app (called at the bottom of this file)
*/
exports.init = function() {
m_app.init({
canvas_container_id: "main_canvas_container",
callback: init_cb,
});
}
/**
* callback executed when the app is initialized
*/
function init_cb(canvas_elem, success) {
if (!success) {
console.log("b4w init failure");
return;
}
m_preloader.create_preloader();
// ignore right-click on the canvas element
canvas_elem.oncontextmenu = function(e) {
e.preventDefault();
e.stopPropagation();
return false;
};
load();
}
/**
* load the scene data
*/
function load() {
m_data.load(APP_ASSETS_PATH + "TEST.json", load_cb, preloader_cb);
}
/**
* update the app's preloader
*/
function preloader_cb(percentage) {
m_preloader.update_preloader(percentage);
}
/**
* callback executed when the scene data is loaded
*/
function load_cb(data_id, success) {
if (!success) {
console.log("b4w load failure");
return;
}
m_app.enable_camera_controls();
m_input.add_click_listener(document.getElementById("Open_Close_Button"), function() {
var boxRig = m_scene.get_object_by_name("Cube_Armature");
var boxTSR_close = m_tsr.from_values(0, 0, 0, 1, 0, 0, 0, 1);
var boxTSR_open = m_tsr.from_values(0, 0, 0, 1, 0.819, 0, 0, 0.573);
m_tsr.interpolate(boxTSR_close, boxTSR_open, boxIsOpen? 0: 1, final_tsr);
m_armature.set_bone_tsr_rel(boxRig, "Cube_Bone", final_tsr);
boxIsOpen = !boxIsOpen;
});
}
});
// import the app module and start the app by calling the init method
b4w.require("TEST_main").init();
От стандартного отличается лишь тем, что добавлен обработчик событий на кнопку, созданную в htlm (да, обработчик работает). И… ничего. Т.е., бедная несчастная кость не двигается вовсе. Пробовал даже функцию m_armature.set_bone_tsr(), результат аналогичный.
Думаю, мб что не не так сделал. Мб что пропустил… Скопировал проект из Code Snippets и давай его уменьшать до задачи, что выше описана. Получилось нечто подобное:
"use strict"
import b4w from "blend4web";
var m_app = b4w.app;
var m_data = b4w.data;
var m_scs = b4w.scenes;
var m_cfg = b4w.config;
var m_quat = b4w.quat;
var m_armat = b4w.armature;
var m_tsr = b4w.tsr;
var m_phy = b4w.physics;
var m_trans = b4w.transform;
var m_vec3 = b4w.vec3;
var m_util = b4w.util;
var m_cam = b4w.camera;
var m_version = b4w.version;
var DEBUG = (m_version.type() === "DEBUG");
var APP_ASSETS_PATH = m_cfg.get_assets_path("BoneApi");
var isMax = false;
var _tsr8_tmp = new Float32Array(8);
export function init() {
m_app.init({
canvas_container_id: "main_canvas_container",
callback: init_cb,
});
}
function init_cb(canvas_elem, success) {
if (!success) {
console.log("b4w init failure");
return;
}
load();
}
function load() {
m_data.load(APP_ASSETS_PATH + "bone_api.json", load_cb);
}
function load_cb(data_id) {
m_app.enable_camera_controls(false, false, false, null, true);
var controls_container = document.createElement("div");
controls_container.id = "Buttons";
var button = create_button();
button.onclick = CustomAction;
controls_container.appendChild(button);
document.body.appendChild(controls_container);
}
function CustomAction() {
var rig = m_scs.get_object_by_name("character_rig");
var max_tsr = m_tsr.from_values(0, 0, 0, 1, 0.715, 0.013, -0.093, 0.693);
var min_tsr = m_tsr.from_values(0, 0, 0, 1, -0.451, -0.024, 0.459, 0.765);
m_tsr.interpolate(min_tsr, max_tsr, isMax? 0: 1, _tsr8_tmp);
m_armat.set_bone_tsr_rel(rig, "upper_arm.R", _tsr8_tmp);
isMax = !isMax;
}
function create_button() {
var button = document.createElement("input");
button.type="button"
button.id = "Open_Close_Button";
button.value = "Open\Close Button";
return button;
}
init();
И в принципе, логика одинаковая, да только модуля инпут давным давно не было, поэтому пришлось делать кнопку более экстравагантным путём. Но внезапно этот код работает. Т.е., прям как надо. Персонаж двигает правой рукой и всё хорошо. Ну, как двигает, просто меняет положение от максимального до минимального, но это и есть решение той задачи что я себе поставил.
К сожалению, понять ПОЧЕМУ у меня не двигается верхняя часть кубика (аля сундук) я не смог и искренне прошу Вашей помощи в решении данной задачи. Грешу пока только на обновлённую версию движка. Ибо по настройкам я для рига и костей всё проверил, всё одинаковое. Уже ума не приложу, почему оно не работает(
05 февраля 2018 20:18
Добрый день, уважаемые коллеги!
Задумал я одну интересную задумку, да наткнулся на своё незнание. Из исходных данных дано 3 анимации: движение вперёд, движение назад и открытие/закрытие. Для удобства как пример делал кубик, разрезанный пополам. И встала задача, чтобы воспроизводить эти анимации так, чтобы одна на другую не влияла. А именно, если предположить, что записаны они как указано выше, то воспроизводить их в следующем порядке: движение вперёд, открытие, движение назад. Вроде бы сделал, да сундук всё одно сначала назад идёт, а после открывается. Не смог я сие решить и начал думать в сторону костей и примера из Code Snippets под название Bone API. Тыкался, мыкался, да опять же ничего не вышло отчего-то. Вот и прошу у Вас помощи, дорогое комьюнити, чтобы объяснили Вы мне по возможности что я делаю не так с костями и их API, да советом помогли с анимацией, чтобы одна на другую не влияла.
Прикладываю проект с моими мучениями.
Задумал я одну интересную задумку, да наткнулся на своё незнание. Из исходных данных дано 3 анимации: движение вперёд, движение назад и открытие/закрытие. Для удобства как пример делал кубик, разрезанный пополам. И встала задача, чтобы воспроизводить эти анимации так, чтобы одна на другую не влияла. А именно, если предположить, что записаны они как указано выше, то воспроизводить их в следующем порядке: движение вперёд, открытие, движение назад. Вроде бы сделал, да сундук всё одно сначала назад идёт, а после открывается. Не смог я сие решить и начал думать в сторону костей и примера из Code Snippets под название Bone API. Тыкался, мыкался, да опять же ничего не вышло отчего-то. Вот и прошу у Вас помощи, дорогое комьюнити, чтобы объяснили Вы мне по возможности что я делаю не так с костями и их API, да советом помогли с анимацией, чтобы одна на другую не влияла.
Прикладываю проект с моими мучениями.
18 января 2018 18:31
Ответ на сообщение пользователя Александр РомановСпасибо большое! Не увидел
Мы указывали эту проблему в release notes. К сожалению стандартный windows-архиватор не поддерживает длинные пути, которые возникли после добавления nodejs в дистрибутив.
17 января 2018 19:58
Ответ на сообщение пользователя sunsetrainНу, у меня стоит 7-zip. С его помощью удалось открыть и распаковать архив. Но всё равно, как-то не нормально
На вскидку - у вас не установлено приложение для работы с архивами - попробуйте установить http://www.7-zip.org/
16 января 2018 22:28
27 сентября 2016 15:33
Добрый день!
Могу ли я средствами API для blend4web реализовать следующую задачу:
У меня на сайте встроен WebGL, созданный с помощью blend4web. Дальше есть 2 пути:
1) У клиента WebGL поддерживается и я показываю сайт так, как задумал.
2) Перехватить ошибку, что у данного клиента нет возможности отображения WebGL (не важно какая причина, будь то браузер старый или видеокарта не поддерживает) и далее, средствами JS разрулить ситуацию, например, весь контент WebGL выпилить.
Интересует именно перехват ошибки, что WebGl не поддерживается. Далее, я сам худо-бедно разберусь.
Спасибо.
С уважением, Щегольков Никита
Могу ли я средствами API для blend4web реализовать следующую задачу:
У меня на сайте встроен WebGL, созданный с помощью blend4web. Дальше есть 2 пути:
1) У клиента WebGL поддерживается и я показываю сайт так, как задумал.
2) Перехватить ошибку, что у данного клиента нет возможности отображения WebGL (не важно какая причина, будь то браузер старый или видеокарта не поддерживает) и далее, средствами JS разрулить ситуацию, например, весь контент WebGL выпилить.
Интересует именно перехват ошибки, что WebGl не поддерживается. Далее, я сам худо-бедно разберусь.
Спасибо.
С уважением, Щегольков Никита
11 августа 2016 21:46
Ну что же… Пишу сюда, вдруг кому интересно будет или кто столкнётся с подобной проблемой.
Всё заработало. Чтобы этого добиться, пришлось отказаться от предварительной загрузки файлов (все файлы собирались в один *.js). С путями и id я не рекомендую что делать, ибо очень большие завязки на них в библиотеках B4W.
Работающий пример можно взять тут:
https://github.com/Mousecach/Deep-Space/tree/develop
Коммит от 11.08.2016, сокращённый номер: a79d534
Инструкция по установке и запуску приложена выше в данной теме.
В дальнейшем эксперименты с предварительной загрузкой файлов продолжатся, но уже на базе работающей версии.
Как будут новые результаты напишу сюда же.
P.S. Милый котик всем для поднятия настроения![winking]()
Всё заработало. Чтобы этого добиться, пришлось отказаться от предварительной загрузки файлов (все файлы собирались в один *.js). С путями и id я не рекомендую что делать, ибо очень большие завязки на них в библиотеках B4W.
Работающий пример можно взять тут:
https://github.com/Mousecach/Deep-Space/tree/develop
Коммит от 11.08.2016, сокращённый номер: a79d534
Инструкция по установке и запуску приложена выше в данной теме.
В дальнейшем эксперименты с предварительной загрузкой файлов продолжатся, но уже на базе работающей версии.
Как будут новые результаты напишу сюда же.
P.S. Милый котик всем для поднятия настроения

