Вопрос - ответ
05 апреля 2016 10:44
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
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 как-то не очень подробно по-моему).
Сцена имеет немного мешей и вся логика прописана на самой 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 - время на отрисовку сабсцены
А документацию по отладке мы будем дописывать.