конфигуратор

15 сентября 2016 22:05 #11837
Как создать конфигуратор, есть ли подобные уроки https://www.blend4web.com/ru/demo/furniture_3D_configurator/?
16 сентября 2016 08:37 #11839
Приветствую.
Уроков по теме создания конфигураторов пока что не находил… Но что бы начать создавать простые конфигураторы достаточно изучить как изменять внешний вид материалов и скрывать/показывать объекты.

Можно ограничеться нодовой логикой, а можно (рекомендуется) изучить API фремворка, что в дальнейшем даёт очень гибкие возможности для развития вашего проекта, но потребует знание JavaScript. .

Могу сделать простенький пример по одному из этих вариантов.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
24 ноября 2016 07:57 #14113
Подскажите еще вот например файл с примером китайской фурнитуры change_image.blend открываю чтобы посмотреть как срабатывает изменения цвета и текстуры, то ничего не видно в нодовой логике, а когда сохраняю для просмотра у себя то текстуры не меняются.
Спасибо.
24 ноября 2016 22:12 #14131
Не могу сейчас посмотреть, но если не ошибаюсь - смена текстур в этом примере реализована через API, а не через нодовую логику т.е. рядом должен находиться Javascript- файл..
Нашел.
Вот его код - разбирайте.
"use strict";

b4w.register("change_image", function(exports, require) {

var m_data    = require("data");
var m_app     = require("app");
var m_cfg     = require("config");
var m_cont    = require("container");
var m_mouse   = require("mouse");
var m_tex     = require("textures");
var m_scenes  = require("scenes");
var m_version = require("version");

var DEBUG = (m_version.type() === "DEBUG");

var APP_ASSETS_PATH = m_cfg.get_std_assets_path() + "code_snippets/change_image/";

var PATH_TO_IMG_CUBE_1b = APP_ASSETS_PATH + "1_b.png";
var PATH_TO_IMG_CUBE_2b = APP_ASSETS_PATH + "2_b.png";

var PATH_TO_IMG_PLANE_1 = APP_ASSETS_PATH + "table_napkin_1.png";
var PATH_TO_IMG_PLANE_2 = APP_ASSETS_PATH + "table_napkin_2.png";

var PATH_TO_NORMAL_PLANE_1 = APP_ASSETS_PATH + "table_napkin_1_normal.png";
var PATH_TO_NORMAL_PLANE_2 = APP_ASSETS_PATH + "table_napkin_2_normal.png";

var _world = null;
var _wait_for_image_loading = false;
var _napkin_flag = false;
var _stand_1 = null;
var _stand_2 = null;

exports.init = function() {
    m_app.init({
        canvas_container_id: "canvas_cont",
        callback: init_cb,
        physics_enabled: false,
        alpha: true,
        show_fps: true,
        autoresize: true,
        assets_dds_available: !DEBUG,
        assets_min50_available: !DEBUG,
        console_verbose: true
    });
}

function init_cb(canvas_elem, success) {

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

function load() {
    m_data.load(APP_ASSETS_PATH + "change_image.json", load_cb);
}

function load_cb(data_id) {
    m_app.enable_camera_controls();
    var container = m_cont.get_canvas();
    _world = m_scenes.get_world_by_name("World");
    _stand_1 = m_scenes.get_object_by_name("stand");
    _stand_2 = m_scenes.get_object_by_name("stand_2");
    container.addEventListener("mousedown", main_canvas_clicked_cb, false);
}

function change_img_cb() {
    _wait_for_image_loading = false;
}

function main_canvas_clicked_cb(e) {

    var x = m_mouse.get_coords_x(e);
    var y = m_mouse.get_coords_y(e);

    var obj = m_scenes.pick_object(x, y);
    if (obj && !_wait_for_image_loading) {
        switch(m_scenes.get_object_name(obj)) {
        case "Sphere_button_2":
            m_tex.change_image(_world, "lightmap", PATH_TO_IMG_CUBE_2b, change_img_cb);
            m_tex.change_image(_stand_1, "cubemap_slot", PATH_TO_IMG_CUBE_2b, change_img_cb);
            break;
        case "Sphere_button_1":
            m_tex.change_image(_world, "lightmap", PATH_TO_IMG_CUBE_1b, change_img_cb);
            m_tex.change_image(_stand_2, "cubemap_slot", PATH_TO_IMG_CUBE_1b, change_img_cb);
            break;
        case "table_napkin":
            if (_napkin_flag) {
                m_tex.change_image(obj, "table_napkin", PATH_TO_IMG_PLANE_1, change_img_cb);
                m_tex.change_image(obj, "table_napkin_normal", PATH_TO_NORMAL_PLANE_1, change_img_cb);
            } else {
                m_tex.change_image(obj, "table_napkin", PATH_TO_IMG_PLANE_2, change_img_cb);
                m_tex.change_image(obj, "table_napkin_normal", PATH_TO_NORMAL_PLANE_2, change_img_cb);
            }
            _napkin_flag = !_napkin_flag;
            break;
        default:
            return;
        }
        _wait_for_image_loading = true;
    }
}

});
25 ноября 2016 03:37 #14133
А возможно это реализовать через ноды?
25 ноября 2016 11:27 #14135
А возможно это реализовать через ноды?
Ноды для смены текстуры у нас нет. Можно попробовать обойтись другими, например, Inherit Material или Set Shader Node Param, но тогда все текстуры для замены придется создать заранее в blend-файле, т.е. они будут не произвольные с диска.
Команда Blend4Web
25 ноября 2016 14:51 #14137
Ноды для смены текстуры у нас нет.
Ну, на самом деле можно схитрить в некоторых случаях.
На одной текстуре можно разместить несколько паттернов, а далее при помощи сдвига UV-координат(через ноды) "менять" текстуру на объекте.
Не всегда это подойдет, но иногда выручит.
P.S.
Текстурный атлас в пожелания разработчикам

Inherit Material
Баловался с ним ,поймал какой-то глюк, хотел по-моему даже в багрепорт написать. Точно ситуации не помню, но для того чтобы на объекте мог меняться материал допустим А на В и обратно - этот объект должен быть по умолчанию с материалом С. (т.е. почему-то у меня не срабатывало переключение обратно на дефолтный материал объекта)
27 ноября 2016 02:32 #14154
Ок, а если менять сам материал нодой, такое возможно?
27 ноября 2016 07:50 #14156
Ответ на сообщение пользователя Макс
Ок, а если менять сам материал нодой, такое возможно?

здесь
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.