Нужна помощь
10 ноября 2016 14:23
Сейчас эта формула переносит камеру не вверх, а назад. Сейчас почему-то Z надо ставить на третье место: [0, 0, 0.5]. Были изменены оси в этом модуле?Да, мы перешли на систему координат блендера в одном из релизов. Раньше верх - это была ось Y, соответственно 2-я кордината, сейчас - как в бленедре - Z - 3-я.
10 ноября 2016 15:16
Еще я заметил, что при билд проекта почему-то не подхватываются все js файлы в app_dev, и не компилируются, соответственно. Это надо вручную делать? Если вручную, то как потом нормально сделать деплой, если фактически загружается архив с проектом, но без дополнительно разработанных js?все должно быть нормально - все скрипты, которые подключены в html, компилируются в один min.js файл
Уточните, а почему bin стал почти в два раза меньше - это за счет выключения tangent shading или сам движок был оптимизирован?Да, из-за tangent shading - у вас в сцене его неприлично много. Из-за этого и зависания - очень много материалов c таким шейдингом + вся сцена довольно полигональная - из-за этого расчет тангент происходит очень долго, поэтому и кажется, что все зависает. Тангентый шейдинг на таком кол-ве материалов очень избыточен, тем более у вас там везде ещё и shadeless проставлен . А раньше мы эту опцию не поддерживали, поэтому экспорт был быстрым. Мы этот момент конечно попробуем оптимизировать, но так сильно злоупотреблять им не надо, тем более вам он в сцене вроде и не нужен.
Скажите, как можно отключить привязку камеры к персонажу, чтобы она могла двигаться сама? Имеется ввиду возможность и привязать, и временно отвязать. А то m_cons.append_stiff_trans там есть, а disappend нет.Есть метод m_cons.remove - в качестве параметра в него нужно передать камеру.
10 ноября 2016 17:30
10 ноября 2016 17:37
Уточните, а о каких кнопках и событиях идет речь с этом коде:
function main_canvas_up(e) {
if (e.button != 0)
return;
if (e.preventDefault)
e.preventDefault();
:) остальное все вроде понятно, а вот эти подстраховочные фишки из jquery прям затягивают в чтение stackoverflow, но по итогу не ясно как и зачем это в приложении к сцене.
Алексей
10 ноября 2016 18:33
ну там, скорее всего, приходит событие мыши "mouseup"
в поле button хранится индекс кнопки: MouseEvent - вообще документация у MDN хорошо написана, можно там искать.
Если интересно, то по поводу preventDefault() можно в спецификации почитать: Default actions and cancelable events
if (e.button != 0)Буквально будет: если была отжата не левая кнопка мыши, а какая-то другая, то ничего не делать
return;
в поле button хранится индекс кнопки: MouseEvent - вообще документация у MDN хорошо написана, можно там искать.
if (e.preventDefault)Ну, исходя из названия, он предотвращает дефолтное поведение браузера, например, если обычно мышью можно выделить текст, то таким образом можно это запретить. Можно использовать, чтобы исключить нежелательные эффекты по действию пользователя.
e.preventDefault();
Если интересно, то по поводу preventDefault() можно в спецификации почитать: Default actions and cancelable events
10 ноября 2016 19:10
10 ноября 2016 19:28
Решил убрать захват мышки канвасом и сделать обзор курсором. Все получилось и работает, но возникает вопрос относительно способа сихронизации поворота камеры и чарактера. Способ, когда с объекта камеры берутся данные и прилепливаются к чарактеру прост и ясен, но если мне нужно развернуть чарактера кнопками, то как мне параметры углов с чарактера снять?
Нашел модуль transform.get_rotation, но он работает с квартенионами, а я даже прочитать это название не могу, не то, чтобы понять как там все эти составлящие w использовать, чтобы привести все в обычные углы, ведь поворот чарактера осуществляется относительно глобальной системы коррдинат, поэтому подавать туда дельта значения не получается - он разворачивается в ноль.
Если работать просто с объектами, то rotate_z_local почему - то вообще не работает относительно чарактера.
Как здесь по грамотней и оптимальнее сделать?
Нашел модуль transform.get_rotation, но он работает с квартенионами, а я даже прочитать это название не могу, не то, чтобы понять как там все эти составлящие w использовать, чтобы привести все в обычные углы, ведь поворот чарактера осуществляется относительно глобальной системы коррдинат, поэтому подавать туда дельта значения не получается - он разворачивается в ноль.
Если работать просто с объектами, то rotate_z_local почему - то вообще не работает относительно чарактера.
Как здесь по грамотней и оптимальнее сделать?
Алексей
10 ноября 2016 20:32
Почему-то отключились коллизион. По одному объекту, по которому ранее была эта опция включена коллизион остались, а с другими, несмотря на то, что галка на всех материалах стоит, чарактер не соприкасается.
В консоли ошибка
URANIUM: Array[1]0: "Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value 67108864, (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "length: 1__proto__: Array[0]
В общем, если я включаю только по половине объектов материалы на коллизион, то ошибки ен возникает и все нормально работает. Это как можно исправить?
В консоли ошибка
URANIUM: Array[1]0: "Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value 67108864, (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "length: 1__proto__: Array[0]
В общем, если я включаю только по половине объектов материалы на коллизион, то ошибки ен возникает и все нормально работает. Это как можно исправить?
Алексей
11 ноября 2016 12:44
Уточните, а в чем принципиальная разница между CT_TRIGGER и CT_CONTINUOUS?В том, сколько раз будет вызываться колбек пользователя. Если ещё не видели, то вот здесь в API документации про эти типы написано подробнее: ссылка.
Если просто объяснять, то допустим мы отслеживаем сенсором движение/остановку камеры. Так вот CT_TRIGGER вызовет колбек один раз, когда камера начала движение (с праметром pulse = 1) и один раз когда она остановилась (pulse = -1), поэтому и называется trigger, т.е. как бы одиночный импульс, когда состояние изменилось. A CT_CONTINUOUS отличается тем, что будет вызывать колбек постоянно каждый кадр во время движения (pulse = 1) и один раз при остановке (pulse = -1) - т.е. это тип продолжительного действия.
11 ноября 2016 12:54
Так вот CT_TRIGGER вызовет колбек один раз, когда камера начала движение (с праметром pulse = 1) и один раз когда она остановилась (pulse = -1), поэтому и называется trigger, т.е. как бы одиночный импульс, когда состояние изменилось. A CT_CONTINUOUS отличается тем, что будет вызывать колбек постоянно каждый кадр во время движения (pulse = 1) и один раз при остановке (pulse = -1) - т.е. это тип продолжительного действия.
А в применении к перемещению персонажа и повороту камеры континиус работает во всех случаях и обеспечивает плавное перемещение при помощи клавиш, а триггер плавно работает только по перемещению персонажа, а для поворота камеры необходмо отжать и нажать клавишу заново. Я для себя хочу понять: во всех случаях в функцию передаётся дельта значения относительно текущих значений, но камера останавливается, а персонаж перемещается при триггере…
Алексей