Автор Тема: Странное поведение в BGE  (Прочитано 35430 раз)

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #30 : 31 Март 2018, 14:22:47 »
>> Была у меня такая попытка – видел описание rayCast.
>> Тогда подумал что это для других случаев.
... настойчивее нужно быть :) ...

>> 26 own.getAxisVect(vect) =  <Vector (1.0000, 0.0064, 0.0001)>
... у тебя выводятся правильные контрольные значения, это замечательно, а ты их на листочке бумаги просчитал? у тебя луч куда направлен - к поверхности или в бок (в пустоту)?
... если поверхность внизу, а основная компонента луча уходит по X, а не по Z, то собственно он и никуда не попадает ...

>> BGE, как помощник с возможностью управления в текущем моменте, для этой цели, должен стать незаменимым. По крайней мере, я надеюсь на это.
... немного ресурсрзатратно, но в принципе почему бы и нет ...
... а как у тебя с арматурной анимацией в Blender, с Physics и Rigid Body без BGE пробовал?
https://docs.blender.org/manual/ru/dev/physics/index.html#physics-types
https://docs.blender.org/manual/en/dev/physics/rigid_body/index.html

...
« Последнее редактирование: 31 Март 2018, 15:07:03 от Николай Николаев »

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #31 : 31 Март 2018, 14:49:20 »
>>> a = own.getAxisVect(Vector((0,0,1))) Вектор выравнивания по оси Х? В чём смысл?
>>> obj,point,normal = sled.rayCast(sled.worldPosition-a*2) - что это за значение "-a*2", в чём его смысл?
>>> sled.worldPosition = point+a*0.03 - а это значение "a*0.03" получено методом "научного тыка"? Работает сразу по трём осям?


... представь, что происходит во время движения колеса с осями Z и Y - они вращаются вокруг оси X, а ось X перпендикулярна плоскости,в которой вращается колесо и эта плоскость вертикальна к поверхности (с небольшим наклоном) ...
... то есть базироваться по другим осям кроме X смысла нет ...
Код
a = own.getAxisVect(Vector((0,0,1)))
sled.alignAxisToVect(a,0,1)
sled.worldPosition = own.worldPosition

... после того как выровняли след по X получаем от него вектор, который направлен по Z (причём это не глобальный Z, а именно Z локальный с учётом наклона следа, то есть плоскость, в которой лежит след перпендикулярна плоскости в которой вращается колеса)  и стреляем в этом направлении в сторону поверхности на два расстояния длины этого вектора и по направлению этого вектора  ...
... по идее нужно стрелять на радиус колеса с небольшим запасом, но суть в том что длина вектора 1 и радиус вектора 1, то две длины вектора это двойной запас ...
Код
a = sled.getAxisVect(Vector((0,0,1)))
obj,point,normal = sled.rayCast(sled.worldPosition-a*2)

... в идеале и с математической стороны можно просто переместить след в point, но тогда во время его отрисовки он будет перекрываться поверхностью, то есть его следует поднять на минимально приемлемое расстояние над поверхностью ...
... но поднимать его нужно не по оси Z, а по направлению нормали к поверхности, а это вектор "a" ...
Код
sled.worldPosition = point+a*0.03

>> получено методом "научного тыка"
... 0.03 получено скорее методом "экспертная оценка", если бы след гарантированно попадал  только в один полигон поверхности, то можно было бы использовать минимально вменяемое значение 0.001, но в твоём случае это бы съело часть следа неровностью смежных полигонов поверхности ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #32 : 31 Март 2018, 16:11:52 »

 ...
... а как у тебя с арматурной анимацией в Blender, с Physics и Rigid Body без BGE пробовал?
https://docs.blender.org/manual/ru/dev/physics/index.html#physics-types
https://docs.blender.org/manual/en/dev/physics/rigid_body/index.html

...
Галопом по европам. С физикой лучше ознакомился, в особенности с жидкостями, с арматурой - по-хуже, с ограничениями - можно сказать совсем плохо. Интересовали частицы - имею некоторое представление. Намечал разобраться со следами, через текстурирование, затем через взаимодействия сеток и уж потом колесо должно покатиться по луже разбрызгивая брызги по сторонам. Если ничто отвлекать не будет, и, повезёт, сумею найти видеоурок или необходимые статьи, то, несмотря на отсутствие официальной возможности работы BGE с частицами, надеюсь добиться своего. Недавно попалась статья на глаза о частицах в BGE, но разбираться пока не пытался.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #33 : 31 Март 2018, 17:27:33 »
>>> a = own.getAxisVect(Vector((0,0,1))) Вектор выравнивания по оси Х? В чём смысл?
>>> obj,point,normal = sled.rayCast(sled.worldPosition-a*2) - что это за значение "-a*2", в чём его смысл?
>>> sled.worldPosition = point+a*0.03 - а это значение "a*0.03" получено методом "научного тыка"? Работает сразу по трём осям?

... представь, что происходит во время движения колеса с осями Z и Y - они вращаются вокруг оси X, а ось X перпендикулярна плоскости,в которой вращается колесо и эта плоскость вертикальна к поверхности (с небольшим наклоном) ...
... то есть базироваться по другим осям кроме X смысла нет ...
Код
a = own.getAxisVect(Vector((0,0,1)))
sled.alignAxisToVect(a,0,1)
sled.worldPosition = own.worldPosition
Интересно девки пляшут… Давай поэтапно.
В моём понимании колесо вращается вокруг оси Х – когда катится, вокруг оси Z – когда поворачивает влево или вправо, вокруг оси Y – его вращение ненужно. В моём понимании вращается объект, оси же стационарны.
В случае глобальной ориентации, честно скажу, мне представить взаимосвязи осей проблемно.
Мы-то, вроде рассматриваем локальную ориентацию?
Теперь далее.
a = own.getAxisVect(Vector((0,0,1))) – это вектор направления колеса направленный по оси Z в глобальной ориентации в сторону возрастания, т.е. от поверхности? Вычитал: getAxisVect(vect) - Возвращает вектор оси, вращающийся по ориентации объекта в пространстве мира.
sled.alignAxisToVect(a,0,1) – это вектор направления следа направленный по оси Z в глобальной ориентации в сторону возрастания, т.е. от поверхности с учётом направления колеса? Это нормаль следа?
Николай, я не спорю с тобой – я уточняю правильность своего понимания.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #34 : 31 Март 2018, 21:37:08 »
>> я не спорю с тобой – я уточняю правильность своего понимания.
... у меня нет стопроцентной уверенности, код, который представил, результат экспериментов на понимание ...
... возможно что есть решение в другой последовательности, думаю вместе разберёмся ...

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #35 : 01 Апрель 2018, 06:44:04 »
... давай вместе порассуждаем ...
... на левой картинке - колесо и две точки касания, А - точка касания середины колеса (допустим поверхность под таким наклоном) и B - точка касания, которую отдаёт обратный вызов коллизии (нарисованный след в ней выглядит нелепо, поскольку точки могут быть и слева и справа) ...
... на правой картинке тоже не очевидно куда пускать луч для определения точки соприкосновения (вниз или ?) ...

... внизу моё представление о скольжении куба и качении шара по наклонной плоскости ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #36 : 01 Апрель 2018, 10:16:06 »
>> я не спорю с тобой – я уточняю правильность своего понимания.
... у меня нет стопроцентной уверенности, код, который представил, результат экспериментов на понимание ...
... возможно что есть решение в другой последовательности, думаю вместе разберёмся ...
Извини Николай, но думаю лучше не отвлекаться на другие последовательности, пока в этой есть непонятки.
... давай вместе порассуждаем ...
... на левой картинке - колесо и две точки касания, А - точка касания середины колеса (допустим поверхность под таким наклоном) и B - точка касания, которую отдаёт обратный вызов коллизии (нарисованный след в ней выглядит нелепо, поскольку точки могут быть и слева и справа) ...
... на правой картинке тоже не очевидно куда пускать луч для определения точки соприкосновения (вниз или ?) ...
Это я понял, к тому же это рассуждения уже о макроуровне. Нет, он, конечно тоже интересен, но для случая создания колеи следа – изменение сетки.
Цитировать
... внизу моё представление о скольжении куба и качении шара по наклонной плоскости ...
Куб скользит – без вопросов. Шар катится с вращением осей вокруг оси Х почему? С моими «тараканами» это как-то не увязывается. Я всегда думал, что оси координат неизменны, и изменяются только значения для объектов.
Ладно, прояснится со временем.
Давай продолжим просмотр кода дальше.
Цитировать
... после того как выровняли след по X получаем от него вектор, который направлен по Z (причём это не глобальный Z, а именно Z локальный с учётом наклона следа, то есть плоскость, в которой лежит след перпендикулярна плоскости в которой вращается колеса)  и стреляем в этом направлении в сторону поверхности на два расстояния длины этого вектора и по направлению этого вектора  ...
... по идее нужно стрелять на радиус колеса с небольшим запасом, но суть в том что длина вектора 1 и радиус вектора 1, то две длины вектора это двойной запас ...
Вопрос: «длина вектора 1 и радиус вектора 1» - разве это не одно и то же?
Цитировать
Код
a = sled.getAxisVect(Vector((0,0,1)))
obj,point,normal = sled.rayCast(sled.worldPosition-a*2)
... в идеале и с математической стороны можно просто переместить след в point, но тогда во время его отрисовки он будет перекрываться поверхностью, то есть его следует поднять на минимально приемлемое расстояние над поверхностью ...
... но поднимать его нужно не по оси Z, а по направлению нормали к поверхности, а это вектор "a" ...
Вектор «а» имеет положительное направление по оси Z, потому и минусуем?
Цитировать
Код
sled.worldPosition = point+a*0.03
>> получено методом "научного тыка"
... 0.03 получено скорее методом "экспертная оценка", если бы след гарантированно попадал  только в один полигон поверхности, то можно было бы использовать минимально вменяемое значение 0.001, но в твоём случае это бы съело часть следа неровностью смежных полигонов поверхности ...
И, всё же. Крутизна склона может быть разной, а потому, если не рассчитывать её фактическое значение в точке, то остаётся подбор коэффициента?
Взгляни на полученные мною картинки. Я, правда, схалтурил – правая и левая картинки выполнены с разным масштабом, но последствия различной крутизны заметны.
Спасибо за помощь и за проявленное терпение. Я очень доволен. Удачи.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #37 : 01 Апрель 2018, 11:19:43 »
>> Вопрос: «длина вектора 1 и радиус вектора 1» - разве это не одно и то же?
... да, ошибка, правильный текст «длина вектора 1 и радиус колеса 1» ...

>> Вектор «а» имеет положительное направление по оси Z, потому и минусуем?
... вектор «а» он в большинстве случаев смотрит примерно вверх, а нужно пустить луч вниз к поверхности ...

>> Я очень доволен. Удачи.
... мне думается, что более корректно будет отслеживать коллизии, при этом нормаль и точка уже будут известны, но нужно будет корректировать положение следа, поскольку точка соприкосновения она не по середине колеса, а слева или справа ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #38 : 01 Апрель 2018, 12:28:31 »
>> Вектор «а» имеет положительное направление по оси Z, потому и минусуем?
... вектор «а» он в большинстве случаев смотрит примерно вверх, а нужно пустить луч вниз к поверхности ...
Не понял. Я про строку:
obj,point,normal = sled.rayCast(sled.worldPosition-a*2)
в ней значение "-a*2" разве не уменьшение значения worldPosition? В случае изменения направления вектора разве не логичнее его умножение на отрицательную величину?
И, ещё. Николай, что-то коэффициент "0.03" мне покоя не даёт, его как-то просчитать можно? Я подозреваю, что он с изменением крутизны склона должен так же меняться, или я неправ?

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #39 : 01 Апрель 2018, 12:39:33 »
>> Не понял. Я про строку: obj,point,normal = sled.rayCast(sled.worldPosition-a*2)
... напиши координаты двух векторов: из которого выйдет луч и в который он придёт ...

>> коэффициент "0.03" мне покоя не даёт, его как-то просчитать можно? Я подозреваю, что он с изменением крутизны склона должен так же меняться, или я неправ?
... если след попадает целиком на плоскость, то это значение может быть очень малым, только для того чтобы обозначить рендеру что след нужно рисовать поверх ...
... этого было бы достаточно, но твоя поверхность, не всегда позволяет это, то есть след будет лежать на двух полигонах, и один из них может быть ориентирован не так как тот по которому рассчитана нормаль ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #40 : 01 Апрель 2018, 12:51:06 »
Николай, я со своим занудством ещё не надоел?
Если не надоел и не отвлекаю от чего-то более интересного тебе, то рискну предложить рассмотрение рельефного следа.
Пристёгиваю файл - немного изменённое колесо всё на той же горке, катящееся вниз по склону. Колесо погружается в поверхность склона на 10 см.
Вот и всё до чего я сам смог додуматься. Далее сетки должны взаимодействовать. Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
Ссылка: http://my-files.ru/krdbgy

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #41 : 01 Апрель 2018, 12:57:13 »
>> Если не надоел и не отвлекаю от чего-то более интересного тебе, то рискну предложить рассмотрение рельефного следа.
... мне через 20 минут коптильню снимать ...

>> Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
... а ты смотрел мувик в конце этого поста http://blender-3d.ru/forum/index.php/topic,2090.msg29474.html#msg29474 это и есть мои соображения на твой вопрос ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #42 : 01 Апрель 2018, 15:21:20 »
... мне через 20 минут коптильню снимать ...
Хм, так у меня ничего не горит... Запросто подождать могу.
Цитировать
>> Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
... а ты смотрел мувик в конце этого поста http://blender-3d.ru/forum/index.php/topic,2090.msg29474.html#msg29474 это и есть мои соображения на твой вопрос ...
А, я, хотел переспросить, что за мувик такой, я должен был посмотреть.
Теперь видел. То, что надо, только не в виде мувика, а в виде blend-файла. Как я понял он уже существует. Что-то мне подсказывает, в нём будет для меня не мало нового и интересного.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #43 : 01 Апрель 2018, 16:04:28 »
Спасибо Николай. Файл тоже увидел. Буду разбираться, хоть этот принцип и не далёк от принципа с текстурой. Я ориентировался на несколько иное, но это потом. Ещё раз спасибо.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #44 : 01 Апрель 2018, 18:44:13 »
Код
import bge
from mathutils import Vector# из модуля mathutils импортировать Vector     

z = Vector((0,0,1))

def init():     # объявление глбальных переменных
    global sc   # сцены
    global wl   # колеса
    global sl   # следа
    global gr   # поверхности
   
    print("Init app\n\n\n")                     # назначение глбальных переменных
    sc = bge.logic.getCurrentScene()            # сцены
    sl = sc.objectsInactive['sled']             # следа
    wl = sc.objects['wheel']                    # колеса
    gr = sc.objects['ground']                   # поверхности
    gr.collisionCallbacks.append(callback)      # вызов процедуры callback ???
   
def callback(object, point, normal):
    ob = sc.addObject(sl)                       # добавить объект следа в сцену
    a = wl.getAxisVect(z)                       # вектор луча исходящий от колеса
    ob.worldPosition = object.worldPosition-z   # позицию следа установить от позиции колеса за вычетом вектора луча
    ob.alignAxisToVect(a,0,1)                   # выверить след согласно вектору исходящего от колеса
Николай, что не так я понял?
Документ Ворда 2003 года сможешь прочитать?

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 100
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

Скачано: 112
Автор: Dilifa12