Форум

Сообщения, созданные пользователем Семенцов Роман
22 января 2016 17:20
Also you can animate the fade-out outline animation with using a timeline sensor
22 января 2016 17:16
Sorry, try to use the following code lines for enabling outline animation
m_scenes.set_outline_intensity(cube, 1);

and for disabling it:
m_scenes.set_outline_intensity(cube, 0);
22 января 2016 14:48
Hello.

m_scenes.apply_outline_anim(cube, 0.5, 1) // cycle effect
m_scenes.apply_outline_anim(cube, 0.5, 1, 0) // cycle effect
m_scenes.apply_outline_anim(cube, 0.5, 1, 1) // not cycle effect
m_scenes.apply_outline_anim(cube, 0.5, 1, 2) // not cycle effect

end etc

The fourth param determines number of the anim iteration.
22 января 2016 12:16
Hello.

I think, you should use JavaScript code to send requests and check they, if you need. The Node Logic Editor can create only simple logic.
Just replace code lines, where m_stor module is used, by server requests. In this case, you can check request states.
17 января 2016 12:22
Hello and welcome to the forum.

Is either of these options possible with blend4web now?

Yes, it's possible. I've created a simple example, using dynamic geometry. I use browser local storage to save cnanged geometry, but you should use server requests.

The application remembers the latest geometry data and save it. When you open the app again, it sets the geometry from memory.

Here is the example (it was created with using the project manager)

And the application code:
"use strict"

// register the application module
b4w.register("test_geometry", 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_ver  = require("version");
var m_scs  = require("scenes");
var m_geom = require("geometry");
var m_obj  = require("objects");
var m_stor = require("storage");

// detect application mode
var DEBUG = (m_ver.type() === "DEBUG");

// automatically detect assets path
var APP_ASSETS_PATH = m_cfg.get_std_assets_path() + "test_geometry/";

var _indices = new Uint16Array([0,1,2,3,4,5]);
var _changed_positions = new Float32Array([0,1,0, -1,0,1, 1,0,-1, 1,0,-1, -1,0,1, 1,0,1]);
var _default_positions = new Float32Array([-1,0,-1, -1,0,1, 1,0,-1, 1,0,-1, -1,0,1, 1,0,1]);

/**
 * export the method to initialize the app (called at the bottom of this file)
 */
exports.init = function() {
    m_stor.init("test_geometry");
    m_app.init({
        canvas_container_id: "main_canvas_container",
        callback: init_cb,
        show_fps: DEBUG,
        console_verbose: DEBUG,
        autoresize: true
    });
}

/**
 * callback executed when the app is initizalized 
 */
function init_cb(canvas_elem, success) {

    if (!success) {
        console.log("b4w init failure");
        return;
    }

    load();
}

/**
 * load the scene data
 */
function load() {
    m_data.load(APP_ASSETS_PATH + "test_geometry.json", load_cb);
}

/**
 * callback executed when the scene is loaded
 */
function load_cb(data_id, success) {

    if (!success) {
        console.log("b4w load failure");
        return;
    }

    m_app.enable_controls();
    m_app.enable_camera_controls();
    var plane = m_scs.get_object_by_name("Plane");
    document.getElementById("def_geom").onclick = function() {
        geometry_change(plane, "Material", _default_positions);
        remember_positions(_default_positions);
    }
    document.getElementById("chan_geom").onclick = function() {
        geometry_change(plane, "Material", _changed_positions);
        remember_positions(_changed_positions);
    }
    var positions_str = m_stor.get("positions");
    if (positions_str) {
        var positions_float = new Float32Array(positions_str.toString().split(",").map(parseFloat));
        geometry_change(plane, "Material", positions_float);
    }
}

function geometry_change(obj, material_name, positions) {
    m_geom.override_geometry(obj, material_name, _indices, positions, false);
    m_obj.update_boundings(obj);
}

function remember_positions(positions) {
    m_stor.set("positions", positions.toString());
}

});

// import the app module and start the app by calling the init method
b4w.require("test_geometry").init();
17 января 2016 10:55
Добрый день.


Нельзя ли в эту группу добавить дополнительное поле или поля, которые содержали бы ссылку на скрипт, обслуживающий данный Object3D

К примеру вы можете сделать следующую конструкцию:
var func = function(obj) {
    console.log(obj);
}
obj.func = func;
if (obj.func)
    obj.func(obj);
15 января 2016 14:19

тоже хотел бы, чтобы победил ravi, но к сожалению, жюри меня не послушало и решило иначе ©.

Мне очень понравилась стилизация этой работы
15 января 2016 10:22

Позволю себе высказать предположение.


Ведь ассоциации индивидуальны: кто-то может каждый год пересматривать гексалогию Звездных Войн; кто-то просматривая календарь вспоминает все, что успел сделать за прошедший год или же превращает покупку нового календаря в целый ритуал.

Вы идеально написали это сообщение. Низкий поклон и снимаю перед вами шляпу!


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

Лично я выше всех оценил работу Кирилла с раннером. В ней самая сложная и интересная логика работы приложения. Но опять же:

Я тоже хотел бы, чтобы победили зайцы, но к сожалению, жюри меня не послушало и решило иначе
25 декабря 2015 18:54
Да, именно это имел ввиду. Подзабыл что свойство называется "Dynamic Geometry". Приношу извинение.
Мы решили, что копирование канвас-текстур должно происходить только при "глубоком" копировании.
Из консоли следует, что объект не скопировался, потому что не имеет динамической геометрии, функция копирования вернула нуль, далее по коду нуль попытался добавиться на сцену.

Написали бы сразу как не получилось.
25 декабря 2015 16:23
Стоило отдельно отметить в релизной статье, что нужно делать глубокое копирование
var CopiedObj = m_obj.copy(LoadedObject,CopiedObjName, true);

Не забудьте про галочку "Force dynamic geometry" в свойствах объекта