论坛

由用户创建的信息 Ivan Lyubovnikov
12 October 2016 11:09
Насколько помню через имя ноды в консоли B4WLogicNode.число можно быстро найти ноду в блендере. Конечно не хватает визуальной отдачи.
консоль не нужна, можно найти через меню Select->Find Node, дальше вводите имя ноды:
12 October 2016 11:02
нужно обновлять вместе и аддон и SDK, вот здесь в доке есть подробная инструкция: https://www.blend4web.com/doc/ru/setup.html#updating

чуть подробнее об ошибках совместимости написано здесь: https://www.blend4web.com/doc/ru/addon.html#compatibility-errors
12 October 2016 10:56
Почему, если быстро двигать камеру или объект если двигается, то блымкают горизонтальные линии? Причем 60fps показывает.
это тиринг: https://en.wikipedia.org/wiki/Screen_tearing - проблема синхронизации монитора и видеокарты, по идее vsync и тройная буферизация должны помогать;

баги ещё могут зависеть и от конкретного графического окружения, например, у меня под линуксом в гноме наблюдается такой же тиринг на канвасе
12 October 2016 10:28
довольно информативный вывод по ошибке :
07 October 2016 17:43
ааа, все понял, это просто у меня движок с изменениями, которые были после последнего релиза - он не соответствует тому, что у вас

просто замените эту строчку:
var button = m_ctl.get_sensor_payload(obj, id, 0).which;

на такую:
var button = m_ctl.get_sensor_payload(obj, id, 0);
07 October 2016 17:14
странно, у меня ваш файл работает

можно подебажить,
например, если закомментировать следующие строчки, то все должно работать по старому:
        if (use_hover)
            if (button == 1)
                button = 3;
            else if (button == 3)
                button = 1;

здесь вообще 1 означает лев. клавишу, 2 - колесо, 3 - правую

по этим условиям:
        if (button === 1) {
            dest_x_mouse += (param == "X") ? -value * left_mult : 0;
            dest_y_mouse += (param == "Y") ? -value * left_mult : 0;
        } else if (button === 2
                || button === 3) {
            dest_pan_x_mouse += (param == "X") ? -value * right_mult : 0;
            dest_pan_y_mouse += (param == "Y") ? -value * right_mult : 0;
        }

- для 1 осуществляется поворот; для 2,3 - паннинг, вроде ничего особенного больше не должно происходить
07 October 2016 16:03
Конкретно за обработку мыши и клавиатуры отвечает аддон app.js, который просто подает нужные значения через API.
Можно поправить аддон - это не так страшно, т.к. он не часть движка, а построен на его API.

Вам нужно вот это место: app.js. Там как раз по нажатой кнопке определяется нужное действие. В режиме HOVER можно поменять кнопки местами, например, так:

var mouse_cb = function(obj, id, pulse, param) {
    if (pulse == 1) {
        var value = m_ctl.get_sensor_value(obj, id, 1);

        m_cam.get_velocities(obj, velocity);
        if (!use_hover) {
            var left_mult  = TARGET_EYE_MOUSE_ROT_MULT_PX * velocity.rot;
            var right_mult = TARGET_EYE_MOUSE_PAN_MULT_PX * velocity.trans;
        } else {
            var left_mult  = HOVER_MOUSE_PAN_MULT_PX * velocity.trans;
            var right_mult = HOVER_MOUSE_ROT_MULT_PX * velocity.rot;
        }

        var button = m_ctl.get_sensor_payload(obj, id, 0).which;
        if (use_hover)
            if (button == 1)
                button = 3;
            else if (button == 3)
                button = 1;

        if (button === 1) {
            dest_x_mouse += (param == "X") ? -value * left_mult : 0;
            dest_y_mouse += (param == "Y") ? -value * left_mult : 0;
        } else if (button === 2
                || button === 3) {
            dest_pan_x_mouse += (param == "X") ? -value * right_mult : 0;
            dest_pan_y_mouse += (param == "Y") ? -value * right_mult : 0;
        }
    }
}
07 October 2016 10:50
But I'm confused on how to use it – would I invoke this in my elapsed sensor callback? Or do I invoke it somewhere else?
Wherever you want, no sensors are required. This method just registers a given callback for calling it every frame until the time expires. For example:

var cb = function(value) {
    var cube = m_scenes.get_object_by_name("Cube");
    m_trans.set_translation(cube, 0, 0, value);
}

m_time.animate(-5, 5, 10000, cb);


another example here: https://github.com/TriumphLLC/Blend4Web/blob/16.09.2/apps_dev/victory_day_2015/victory_day_2015.js#L248-L256
03 October 2016 11:17
I've managed to cobble together a basic scene – some animation, manipulating a simple cube via clojurescript. Check it out here

Here's that same project's source code – you can find the 'meat' of the logic in ../src/cube_test/core.cljs.
Cool, it works nice. Do you plan to do something more complex than that?
Also a little advice, the animation via elapsed sensor depends on frame rate, so in Chrome with gpu vsync disabled and around 600 FPS the cube moves very fast . To avoid this you can use the time.animate method.

Note that it seems to work better on Chrome – FF doesn't seem to load shadows the same way.
Hmm… I don't see the difference. Can you show a screenshot?
This can be related to a specific GPU. FYI, we apply some compatibility hacks depending on the GPU's renderer/vendor info - you can see them as warnings in a browser console. Unfortunately, FF doesn't allow to retrieve such data, hence some of that hacks don't work.
30 September 2016 17:25
It turns out I'm a goddamn fool – I was trying to create the manifold from the elapsed sensor object, *not* from the controls module :P
don't blame yourself, this is what happens from time to time with all of us
glad you've solved the problem