Quest3D - Русскоязычное сообщество

Quest3D => Логика => Тема начата: micB от 26 Ноября 2009, 12:38:19



Название: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 26 Ноября 2009, 12:38:19
Требуется что бы при щелчке на объекте воспроизодилась анимация объекта, на котором щелкнули.
Номер объекта получаю через CollisionRayCheck, затем по щелчку на объекте (On Left Mouse Down)пытаюсь внести номер объекта в канал Value, но это значение всегда 0, как буд-то щелчка не происходит. Заменил CollisionRayCheck на DetectMouse Collision всё работает, но тогда нажимаются все объекты которые под курсором.
Если в UserInput ставить Left Mouse Down тогда тож почти всё работает, кроме щелчка на объекте. Ведь можно щелкнуть в сторонке, а потом навести курсор на объект.
Объясните плиз, где собака порылась, почему в этой схеме при использовании в UserInput  On Left Mouse Down в value всегда приходит 0?
Спасибо.


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 26 Ноября 2009, 14:43:05
В общем голову сломал, почему оно так. Сделал немного по другому. Пришлось добавить еще один юзер инпут на OnLeftMouseUp он сбрасывает значение в 0. Остальные значения берутся напрямую с CollisionRayCheck.
Но всё же вопрос остался открытым, я так и не дотумкал почему не работала предыдущая схема.


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: →|๖ۣۜDen|← от 27 Ноября 2009, 10:45:52
Когда ты используешь Detectmouse collision и CollisionRayCheck - корректного результата можно не добится. И совместное их использование вообще не нужно, во-первых ты нагружаешь цп на дополнительные просчёты, во-вторых детект просто не нужен, если ты используешь колижн рей чек. в твоём случае нужно проверять есть ли столкновения луча с другими объектами, посмотри исходник (4.3), как это работает.
Далее - у тебя импортированный, заанимированый объект. Не знаю пути решения как проверить коллизию заанимированного импортированного из макса объекта, из наблюдений могу сказать, что коллизия проверятся не динамически, вернее, тоже не совсем корректно: Когда анимация объекта проплывает по таймеру, и объект перемещается, коллизия находится в том месте, где объект был в первоначальный момент и минус та часть куска, которой уже нет в данной позиции. Намулевал схематически то что щас наговорил :P (см. рис.) Когда ты переходишь из первой позиции в 3-юю, чтоб вернуться обратно в 1-ую из 3-ей, нужно нажать в жёлтую область, в моём случае кубика (в красную область, как на второй позиции, нажать не получится). Т.к. первоначально в момент нажатия во 2ой позиции можно было и в зелёную и жёлтую. А потом объект исчезает в третьей позиции из зелёной области. Не понятно, почему нельзя в третьей позиции получить коллижн в области где на второй позиции красно...видимо приколы импорта...или просто есть ещё такая проблема у квеста как невозможность считывания данных из моушн сет. Может я не прав...Выход вижу такой - импортировать свой объект из макса в квест, а анимировать непосредственно в квесте. Разработчики бы тебе сказали - юзай колладу...


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 27 Ноября 2009, 12:00:29
Привет!
может я сейчас скажу не в тему, но все же, как вариант, если проблема действительно в анимации, то наверное стоит создать объект "пустышка"(объект, который не будет выводиться на рендер ), и в каждом кадре присваивать данные из матрицы (или матрицу целиком) анимированного объекта в матрицу "пустышки".
CollisionRayCheck проверять с "пустышкой".


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 27 Ноября 2009, 12:54:32
Den Первоначально сделал на ДетектМаусКолижн, но когда понял что у них нет никих параметров для определения кол-ва объектов под мышью и работы с этими объектами по отдельности, то решил переделать на КолижнРэйЧек. А из сцены их просто забыл удалить перед тем как выложить. :)
То бишь не было задумки использовать их одновременно.
За то что коллизия проверяется не динамически - спасибо. :) Заметил, что рэй чек себя в моем случае вел как то не адекватно, теперь все встало на свои места. :)

Ruslan Хорошая идея. :)


Попробую оба способа, а там посмотрю чего больше понравится.

Спасибо.


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 27 Ноября 2009, 14:47:16
Den Щас потыкал, по моему все проще (я про твою схему с кубиками). Рэй чек всегда срабатывает на то пространство, которое занимал объект в начальной позиции, на твоей схеме это зеленое и желтое поле.

Ruslan Сижу вот репу чешу, как енту матрицу от туда выковырять. ???
Вот тут нашел.
http://guest3d.wohlnet.ru/forum/index.php?topic=704.0
Но чет у меня не коннектится как Viik пишет. Может кто схемку выложит?


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 27 Ноября 2009, 18:43:20
ня


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: DimiS от 30 Ноября 2009, 04:01:06
вы тут немного не в том направлении развиваете мысль
просто On Left Mouse Down у тебя вызываеться 2 раза подряд, первый при проверке тригера и второй при записи значения в переменную. Так вот первый раз он отрабатывает нормально, потому что видит что состояние кнопки поменялось, а вот второй раз он уже воспринимает нажатое состояние кнопки как старое, и соответственно говорит что клика не происходило.
Решение в том чтобы сохранять значение именно колижен рей чека, а не того экспрешен велью. А чтобы всё было совсем правильно, то лучше сохранить значение солижен рей чека в отдельную переменную, и потом работать с этой переменной -- каждый вызов рей чека, это новый просчёт, может стать тормозом производительности если объектов много или они сложные.


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 30 Ноября 2009, 09:37:07
DimiS Если правильно тебя понял - на второй схеме оно так и подключено. В переменную заносится колижн рэй чек, а не результат экспрешшн. Ток тепеть мне еще и логику разжевали, почему в первом случае не работает, а во втором работает. :) Спасиб.

Ruslan Спасиб за файл, ток у меня с ним чегот не то. Как я понял ключевой момент - это канал Command с установленным значением Get Matrix From Import Object (судя по названию канала). Когда я захожу в его свойства, то канал пуст, а значения Get Matrix From Import Object в списке вообще нет (в хелпе я его тож не нашел). Может версия чего т не того? У меня 4.2.2
Нашел вот тута: http://guest3d.wohlnet.ru/forum/index.php?topic=691.0
 вот это - #000923: Duplicate entry of "Get Matrix From Import Object" in command channel. Это одно из нововведения версии 4.3. То бишь в 4.2.2 такого метода у канала Command апще нету? Можно ли как нить по другому в 4.2.2 получить матрицу объекта?



Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 02 Декабря 2009, 08:19:15
Ruslan В 4.3 усё получилось. Ток почему то при взятии матрицы у одного объекта и присвоении ее другому объекту, происходило относительное смещение объектов. Хотя все пивоты и углы поворотов у всех объектов в нуле и до присвоения чужой матрицы объекты находились в точности там же где и объекты-доноры.
Почему такое происходит понять не смог, поэтому тупо сделал сабтракт на нужные величины.
Еще раз спасибо за помощь. :)


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 02 Декабря 2009, 10:49:04
Есть несколько моментов:
- геометрия должна быть одна и таже.
- Size Vector должен быть 1,1,1

(в примере, разная геометрия и Size Vector 0.3 0.3 0.3  только для наглядности)


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 02 Декабря 2009, 15:10:22
Ruslan Про сайз вектор догадался. :)
Я впихнул для рэй чека облегченную геометрию (но она достаточно точно повторяет форму основное геометрии), все равно ж ее видно не будет. А почему геометрия обязательно должна быть одна и таже?


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 02 Декабря 2009, 15:28:31
Цитировать
А почему геометрия обязательно должна быть одна и таже?

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


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 04 Декабря 2009, 06:59:31
Ruslan Угу. Пост DimiS про оптимизацию тож навел на мысль о проверке рэй чека только во время клика. Хотя в этом "проекте" это излишне - 9 объектов общий полигонаж 1150 поликов и одна дифузная текстура 2048х2048. Будет время, переделаю правильно, в дальнейшем схемка пригодится. :)


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: micB от 08 Декабря 2009, 06:36:44
Сделал вызов РэйЧека по клику. Фпс был 2900, стал 3100. :) Но самое на мой взгляд важное: раньше при воспроизведении анимации (импортированной из 3д софта) фпс падал с 2900 до 2650 - 2700, теперь же стал снижаться с 3100 всего до 3065. То бишь РэйЧек наиболее мощно поджирает ресурсы при воспроизведении импортированной анимации (с квестовской анимацией не пробовал). Пригодится на более масштабных проектах.
Хотел выложить то что получилось, все таки первая выполненная полностью под заказ и законченная работа (хоть и не большая). Но большое начальство велело не распространять. :(


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 05 Января 2010, 11:49:12
Всем Привет!
Cтолкнулся с квестобагом, команда Get Matrix From Import Object работает неправильно.
Если вектор позиции, можно получить из матрицы, которая в свою очередь получена с помощью этой команды (хоть и со смещением, о котором выше писал micB), то вектор вращения не читается. Как быть?
Задал вопрос на офе, там, на заданный вопрос про бажность канала на данный момент, внятно не ответили.
Может кто сталкивался, и знает обходные пути решения?


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: DimiS от 05 Января 2010, 12:38:53
да нет, с каналом всё в порядке, просто твой алгоритм получения вектора вращения какой то не правильный. Попробуй там подставить вместо импортированной матрицы любую моушен матрицу и получить оттуда такой же вектор вращения как ты туда подключил.


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 05 Января 2010, 12:48:58
Да согласен схема получения вектора не правильная, но я пробовал подключать правильно, как советовали на офе, но результат тот же.
Даже при такой схеме, объект должен хоть как-то "дергаться".


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 05 Января 2010, 13:00:35
Вот, тот же пример, с правильной схемой.
Да действительно, команда вроде как заносит в матрицу какие-то левые значения для вектора вращения, но все равно, нужного результата я не получил.
 ???


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: DimiS от 05 Января 2010, 15:42:22
попробуй так, уже больше похоже на правду ;)


Название: Re: On Left Mouse Down. На мой взгляд ведет себя не понятно.
Отправлено: Ruslan от 05 Января 2010, 15:53:04
DimiS
Спасибо за помощь! какой раз уже выручаешь..  :)