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

Оффлайн Novichok

  • Житель
Странное поведение в BGE
« : 24 Март 2018, 16:53:38 »
Всем привет. Ищу помощь в освоении BGE.
В моём файле, при разорванной связи между сенсором и контроллером колесо катится как ему и положено по склону. Однако с восстановлением связи колесо коснувшись склона стремительно набирает высоту. Что в скрипте побуждает к этому никак понять не могу.
Буду благодарен за любую помощь.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #1 : 24 Март 2018, 17:00:05 »
... суть проблемы в коллизии - у тебя след(ы) создаются там же где и колесо и следовательно в один момент времени в одном месте находятся как минимум два объекта с коллизиями, которые Blender не может разрулить, поэтому колесо улетает ...
... для проверки отключи коллизию у следа и продумай их логику (выдели след, установи в редакторе свойств активного объекта во вкладке  Physics для свойства Physics Type: No Collision) ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #2 : 24 Март 2018, 18:29:20 »
Николай, большое тебе спасибо за моментальную помощь. Действительно, снял противоречия и след выстелился почти как задумано. Наложение следов друг на друга меня пока не напрягает. В данный момент есть непонимание того, что колесо, почти в конце пути, делает левый поворот, а след ложится в стороне, на некотором расстоянии.
В консоли распечатка:
6 pos =  <Vector (-0.2915, -16.1061, 0.2320)> - позиция колеса.
25 sled.worldPosition =  <Vector (-0.2915, -16.1061, -0.7680)> - позиция следа.
Вроде всё как задумано, а визуально получается появление следа в стороне от места где прошло колесо.
Какие-то рекомендации по этому вопросу сможешь дать?
Ещё раз спасибо за помощь.
Да, коллизии - столкновения?

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #3 : 24 Март 2018, 20:14:40 »
... позиция колеса и место соприкосновения колеса с землёй это разные точки - потому что колесо не вертикально ...

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #4 : 24 Март 2018, 21:16:47 »
... решение по коррекции траектории - делать расчёт точки соприкосновения (через вектора) или попытаться использовать точку, которая формируется во время коллизии при соприкосновении колеса с землёй, но там есть свои проблемы (поскольку будут соприкасаться левая или правая сторона колеса) ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #5 : 25 Март 2018, 08:45:17 »
Цитировать
... решение по коррекции траектории - делать расчёт точки соприкосновения (через вектора) или попытаться использовать точку, которая формируется во время коллизии при соприкосновении колеса с землёй, но там есть свои проблемы (поскольку будут соприкасаться левая или правая сторона колеса) ...
Вектора вряд ли мне сейчас будут по зубам, а вот соприкосновение левой или правой стороной колеса попробую устранить за счёт ликвидации угла наклона колеса. Николай, я очень доволен твоей помощью, спасибо большое. Очень рад знакомству.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #6 : 25 Март 2018, 09:35:55 »
>> Очень рад знакомству.
... взаимно, всегда рады новому коду ...

>> Вектора вряд ли мне сейчас будут по зубам
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...
... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...

>> соприкосновение левой или правой стороной колеса попробую устранить за счёт ликвидации угла наклона колеса
... поясни цель задачи, это курсовик? может стоит условия поменять ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #7 : 26 Март 2018, 11:53:55 »
Цитировать
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...
... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...
Здорово. Ещё бы позёмка развевала след, было бы вообще супер, а так она выглядит здесь лишней.
Если честно, то этот ролик для меня подходит как второй, следующий этап в моей задумке. Вообще след как деформацию сетки поверхности я даже пока не представляю как алгоритм и собирался обратиться за такой подсказкой, но после того как разберусь со следом в виде текстуры.
Цитировать
... поясни цель задачи, это курсовик? может стоит условия поменять ...
Нет. Любопытство. Желание попробовать свои силы в самостоятельном изучении чего-то нового, незнакомого. А, условия и так самые примитивные.
Николай, у меня тут проблема с переменными появилась, может подскажешь не очень заумно.
Код
if not 'objs' in own:                   # если нет списка добавляемых следов
        print("25 not 'objs' in own = ", not 'objs' in own)
        own['objs'] = []                    # создать список добавляемых следов
        longSleda = 0  # назначаю параметр переменной
        print("29 longSleda = ", longSleda)   # проверка
    elif own['objs'] == []:                 # если список уже создан
        print("31 not 'objs' in own = ", not 'objs' in own
        own['objs'].append(sled)            # добавить след в список
        longSleda += spd    # наращиваю длину следа
        print("34 longSleda = ", longSleda)   # проверкка
    if longSleda >= 0.4:
        print("36 longSleda = ", longSleda) 
        sled = scn.addObject(inobjs[sled]) # добавить след в сцену
        sled.worldPosition.x = pos.x    #расположить след в точке столкновения
        sled.worldPosition.y = pos.y #расположить след в точке столкновения
        sled.worldPosition.z = pos.z - 1 #расположить след в точке столкновения, с заданным отступом
        print("41 sled.worldPosition = ", sled.worldPosition)   #
        own['objs'] = []                    # очистить список следов
        longSleda = 0
При создании списка объявляется переменная longSleda.
Если список есть, то в него добавляется объект, и наращивается значение переменной longSleda.
Если переменная longSleda более 0.4 то след помещается в сцену.
Но, это мои хотелки, а Python мне говорит: "тут вижу, тут не вижу"
Цитировать
25 not 'objs' in own =  True
29 longSleda =  0
 =
31 not 'objs' in own =  False
Python script error - object 'Koleso', controller 'Python':
Traceback (most recent call last):
  File "Text", line 33, in <module>
NameError: name 'longSleda' is not defined
Как долго переменные живут, только в одном кадре, или я в чём-то другом ошибаюсь?

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #8 : 26 Март 2018, 13:17:34 »
Цитировать
Как долго переменные живут, только в одном кадре, или я в чём-то другом ошибаюсь?
Куском чего является этот твой код?
Если это внутри какой-либо функции, то все её локальные переменные живут только внутри одного вызова.
Если нужно длительное хранение значения, то это должна быть либо глобальная переменная (для её изменения внутри функции применяется ключевое слово globals), либо она должна быть членом некоего большого объекта (тогда уже он должен быть глобальной переменной) - это может быть экземпляр класса, или, например, словарь.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #9 : 26 Март 2018, 13:29:39 »
>> Как долго переменные живут, только в одном кадре, или я в чём-то другом ошибаюсь?

... рекомендовал бы использовать Module Mode против Script Mode, преимущества описаны здесь https://wiki.blender.org/index.php/Doc:/Tutorials/Game_Engine/ScriptMode_vs_ModuleMode ...
... собственно Module Mode - полноценная программа внутри Blender с соответствующими областями видимости переменных, в том числе и global ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #10 : 26 Март 2018, 19:44:10 »
... рекомендовал бы использовать Module Mode против Script Mode, преимущества описаны здесь https://wiki.blender.org/index.php/Doc:/Tutorials/Game_Engine/ScriptMode_vs_ModuleMode ...
... собственно Module Mode - полноценная программа внутри Blender с соответствующими областями видимости переменных, в том числе и global ...
Постараюсь освоить и модули. Blender меня заинтересовал своими возможностями "не программируя делать программы" - ведь я не программист и имею самые начальные понятия в этом деле. Затем заинтересовавшись BGE, увидел любопытную возможность воздействия на происходящие процессы, но тут потребовалось создавать скрипты. "Скрипнув зубами", освоил самые простые возможности. Теперь мне предлагается освоить модули...
Купился на простоту, а простота оказалась обманчивой...
Объявил переменную глобальной - стала сохраняться. В принципе, действительно скрипт должен работать только на тот кадр, в котором активируется контроллер Python вызывающий скрипт, и мои проверки условий годятся только при условии глобальности проверяемых переменных.
Принял. Спасибо за подсказку.
« Последнее редактирование: 26 Март 2018, 20:00:26 от Novichok »

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #11 : 26 Март 2018, 19:55:32 »
Куском чего является этот твой код?
Да, по сути, ответом на вызов появления следа за колесом в ответ на его перемещение.
Цитировать
Если это внутри какой-либо функции, то все её локальные переменные живут только внутри одного вызова.
Если нужно длительное хранение значения, то это должна быть либо глобальная переменная (для её изменения внутри функции применяется ключевое слово globals), либо она должна быть членом некоего большого объекта (тогда уже он должен быть глобальной переменной) - это может быть экземпляр класса, или, например, словарь.
Я благодарен за пояснения. Вроде всё очевидно, однако сам это учесть не смог.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #12 : 27 Март 2018, 11:40:21 »

... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...

Николай, что у меня получилось видно на рисунке Sled 3.jpg.
Чётко видно, что нормаль следа не соответствует нормали поверхности в точке соприкосновения, отсюда и ступенчатость. Можно ли привести каким-то способом нормаль следа в соответствие с нормалью поверхности в точке соприкосновения?  Попробовал привести ориентацию следа в соответствии с ориентацией колеса, но понял что здесь у меня абсолютный ноль в знаниях таких методов.

Да, чуть не забыл. Точку соприкосновения колеса и поверхности тупо вычисляю вычитанием половины размера колеса из его позиции по оси Z. Однако, в связи с наклоном колеса, необходимо учитывать и его, т.е. ещё и изменение позиции по осям X и Y (см. рис. Sled 2.jpg). Как Python можно озадачить этим?
Чем-нибудь сможешь помочь в решении моих проблем?
« Последнее редактирование: 27 Март 2018, 12:21:29 от Novichok »

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #13 : 27 Март 2018, 17:09:12 »
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...
... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...
Гоняю и гоняю я этот вездеход, и всё больше и больше мне он нравится.
Как понимаю след просчитывается на один трак? Что собою представляет поверхность, плоскость без толщины или сетка с толщиной необходимой для продавливания/вспучивания? Для следа модификаторы какие-либо использовались или чисто математически решено?

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #14 : 27 Март 2018, 19:09:59 »
>> Чем-нибудь сможешь помочь в решении моих проблем?
... мне думается что нужно посчитать некоторую последовательность векторов и матриц, посмотрю подробнее после выходных ...

>> модификаторы какие-либо использовались или чисто математически решено?
... pure mathematics ...
... кстати, этот проект opensources, так что весь код доступен по адресу https://github.com/sungreen/sungreen.github.io/tree/master/projects/veterbot ...
... делалось тоже для себя, на попробовать ...

 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 67
Автор: LEXA ANЭGROWND
blender.png
Скачано: 77
Автор: ipv2007
4.png
Скачано: 99
Автор: hiroyukiss
2.png
Скачано: 121
Автор: hiroyukiss

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