Форум

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

Прошу удалить эту или ту тему на усмотрение администрации
08 марта 2018 23:05
Всем доброго времени суток! Задался целью подвигать немного кости у моего свеже созданного кубика. А если быть точнее, то одну, да причём подвигать из html кнопки.


Ничего воде бы, не предвещало беды, изучил 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, да советом помогли с анимацией, чтобы одна на другую не влияла.

Прикладываю проект с моими мучениями.
18 января 2018 18:31
Ответ на сообщение пользователя Александр Романов
Мы указывали эту проблему в release notes. К сожалению стандартный windows-архиватор не поддерживает длинные пути, которые возникли после добавления nodejs в дистрибутив.
Спасибо большое! Не увидел
17 января 2018 19:58
Ответ на сообщение пользователя sunsetrain
На вскидку - у вас не установлено приложение для работы с архивами - попробуйте установить http://www.7-zip.org/
Ну, у меня стоит 7-zip. С его помощью удалось открыть и распаковать архив. Но всё равно, как-то не нормально
16 января 2018 22:28
Добрый день! Скачал последний билд b4w ce, пытаюсь открыть архив и получаю такую вот ошибку

На всплывающее окно о просьбе рассказать о себе, ничего не написал и нажал "просто хочу скачать" или как-то так
27 сентября 2016 20:58
Спасибо огромное!
27 сентября 2016 15:33
Добрый день!
Могу ли я средствами 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. Милый котик всем для поднятия настроения