Вопрос - ответ

05 апреля 2016 10:44
Всё просто
Круто! Спасибо
Остался еще вопросик про ортогональную камеру + calc_ray. Не выходит пока.
05 апреля 2016 18:49
<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="js/b4w.min.js"></script>
        <script type="text/javascript" src="js/test.js"></script>
        <script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
        <link href="css/main.css" rel="stylesheet">
    </head>
    <body>
        <div id="canvas3d"></div>
    </body>
</html>


"use strict";
//3d start
b4w.register("test", function(exports, require) {

	var m_data = require("data");
	var m_app = require("app");

	exports.init = function() {
		m_app.init({
			canvas_container_id: "canvas3d",
			callback: init_cb,
			show_fps: true
		})
	}

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

	function load() {
		m_data.load("/scene/test.json", load_cb);
	}

	function load_cb(data_id) {
		m_app.enable_camera_controls();
	}
})

b4w.require("test").init();


Пробую запустить дефолтную сцену из блендера, вроде бы все сделал как в CodeSnippets, но не стартует. В консоли: Uncaught RangeError: Offset is outside the bounds of the DataView. Где я нарукопопил?
05 апреля 2016 19:10
Пробую запустить дефолтную сцену из блендера, вроде бы все сделал как в CodeSnippets, но не стартует. В консоли: Uncaught RangeError: Offset is outside the bounds of the DataView. Где я нарукопопил?
Не удалось воспроизвести. Можете сделать "deploy project" и прикрепить сюда архивом?
05 апреля 2016 19:27
Остался еще вопросик про ортогональную камеру + calc_ray. Не выходит пока.
Так там camera_ray - это (0, -1, 0), потому что смотрим из камеры сверху вниз в направлении -Y. Это как раз правильно, и проверка не нужна.

Вот так, вроде, нормально работает (pline можно сразу в line_plane_intersect подавать):

function main_canvas_mousemove(e) {
    if (_drag_mode)
        if (_selected_obj) {
            m_app.disable_camera_controls();

            // calculate viewport coordinates
            var cam = m_scenes.get_active_camera();

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

            if (x >= 0 && y >= 0) {
                x -= _obj_delta_xy[0];
                y -= _obj_delta_xy[1];

                // emit ray from the camera
                var pline = m_cam.calc_ray(cam, x, y, _pline_tmp);

                // calculate ray/floor_plane intersection point
                var point = m_math.line_plane_intersect(FLOOR_PLANE_NORMAL, 0, pline, _vec3_tmp3);
                // console.log(point);
                if (!point)
                   console.log("no poit");

                // if (camera_ray[1] < 0)
                //    console.log("camera_ray[1] < 0");
                // do not process the parallel case and intersections behind the camera
                if (point) 
                    m_trans.set_translation_v(_selected_obj, point);
            }
        }
}


P.S. Шарик сейчас всегда сдвигается к центру курсора, в какой точке его ни возьми. Чтобы этого избежать, нужно запоминать смещение от центра шарика при mousedown, а при mousemove потом его учитывать - в демке cartoon_interior так и происходит.
05 апреля 2016 19:45

Не удалось воспроизвести. Можете сделать "deploy project" и прикрепить сюда архивом?
Я все ручками делаю, не заморачивался с проджект менеджером, перед отправкой решил убить все не нужное ну вообщем все заработало… Все как на производственных плакатах: Порядок на участке - и работать приятно!
05 апреля 2016 21:43
Все как на производственных плакатах: Порядок на участке - и работать приятно!
Вот это правильно!
05 апреля 2016 22:27
Вот так, вроде, нормально работает (pline можно сразу в line_plane_intersect подавать)
Здорово. Спасибо, Иван. И мне как раз и надо, чтобы объект к центру мыши прилипал, так что норм.
Непонятка только, что теперь курсор при перетаскивании меняет свой вид со стрелки на вид как при редактировании текста.
06 апреля 2016 12:05
Непонятка только, что теперь курсор при перетаскивании меняет свой вид со стрелки на вид как при редактировании текста.
У меня в хроме нормально, может от браузера зависеть. Вообще, это через CSS должно решаться. В том же cartoon_interior на body есть правила, которые, вроде, помогали:

-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;


Можно ещё принудительно сам курсор настроить:
https://css-tricks.com/almanac/properties/c/cursor/
12 апреля 2016 22:49
Как можно запустить проект в просмотрщике сцен?
Сцена имеет немного мешей и вся логика прописана на самой html-странице в js. В том числе и размножение мешей до требуемого количества.
Т.е. если запустить просмотрщик из блендера в фаст превью, то по сути ж загрузится json сцены с малым количеством мешей, плюс никакой логики, а надо запустить в просмотрщике само приложение.

Цель, увидеть HUD-info. Может есть варианты увидеть его не в просмотрщике, а так же как при загрузке сцены можно указать show_fps=true, может и с hud-info так можно? (пока еще толком не знаю правда что за информация там и как ее оценивать, в документации по панели Tools & Debug как-то не очень подробно по-моему).
13 апреля 2016 10:33
Цель, увидеть HUD-info. Может есть варианты увидеть его не в просмотрщике, а так же как при загрузке сцены можно указать show_fps=true, может и с hud-info так можно? (пока еще толком не знаю правда что за информация там и как ее оценивать, в документации по панели Tools & Debug как-то не очень подробно по-моему).

Нужно при инициализации включить опцию show_hud_debug_info:

m_app.init({
        ...
        show_hud_debug_info: true,
        ...
});


Информация там примерно такая:
(A) MAIN_OPAQUE 1 1920x872 2 of 2 0.132
(P) MAIN_BLEND 1 1920x872 0 of 0 0.000


A/P - активна сабсцена или нет на данный момент
MAIN_OPAQUE - название сабсцены
1 - число источников света
1920x872 - размер текстуры, куда происходит рендеринг
2 of 2 - количество отрисовываемых объектов из общего числа
0.132 - время на отрисовку сабсцены

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