3d форум по Blender

Blender => Вопросы от новичков => Тема начата: Novichok от 24 Март 2018, 16:53:38

Название: Странное поведение в BGE
Отправлено: Novichok от 24 Март 2018, 16:53:38
Всем привет. Ищу помощь в освоении BGE.
В моём файле, при разорванной связи между сенсором и контроллером колесо катится как ему и положено по склону. Однако с восстановлением связи колесо коснувшись склона стремительно набирает высоту. Что в скрипте побуждает к этому никак понять не могу.
Буду благодарен за любую помощь.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 24 Март 2018, 17:00:05
... суть проблемы в коллизии - у тебя след(ы) создаются там же где и колесо и следовательно в один момент времени в одном месте находятся как минимум два объекта с коллизиями, которые Blender не может разрулить, поэтому колесо улетает ...
... для проверки отключи коллизию у следа и продумай их логику (выдели след, установи в редакторе свойств активного объекта во вкладке  Physics для свойства Physics Type: No Collision) ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 24 Март 2018, 18:29:20
Николай, большое тебе спасибо за моментальную помощь. Действительно, снял противоречия и след выстелился почти как задумано. Наложение следов друг на друга меня пока не напрягает. В данный момент есть непонимание того, что колесо, почти в конце пути, делает левый поворот, а след ложится в стороне, на некотором расстоянии.
В консоли распечатка:
6 pos =  <Vector (-0.2915, -16.1061, 0.2320)> - позиция колеса.
25 sled.worldPosition =  <Vector (-0.2915, -16.1061, -0.7680)> - позиция следа.
Вроде всё как задумано, а визуально получается появление следа в стороне от места где прошло колесо.
Какие-то рекомендации по этому вопросу сможешь дать?
Ещё раз спасибо за помощь.
Да, коллизии - столкновения?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 24 Март 2018, 20:14:40
... позиция колеса и место соприкосновения колеса с землёй это разные точки - потому что колесо не вертикально ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 24 Март 2018, 21:16:47
... решение по коррекции траектории - делать расчёт точки соприкосновения (через вектора) или попытаться использовать точку, которая формируется во время коллизии при соприкосновении колеса с землёй, но там есть свои проблемы (поскольку будут соприкасаться левая или правая сторона колеса) ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 25 Март 2018, 08:45:17
Цитировать
... решение по коррекции траектории - делать расчёт точки соприкосновения (через вектора) или попытаться использовать точку, которая формируется во время коллизии при соприкосновении колеса с землёй, но там есть свои проблемы (поскольку будут соприкасаться левая или правая сторона колеса) ...
Вектора вряд ли мне сейчас будут по зубам, а вот соприкосновение левой или правой стороной колеса попробую устранить за счёт ликвидации угла наклона колеса. Николай, я очень доволен твоей помощью, спасибо большое. Очень рад знакомству.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 25 Март 2018, 09:35:55
>> Очень рад знакомству.
... взаимно, всегда рады новому коду ...

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

>> соприкосновение левой или правой стороной колеса попробую устранить за счёт ликвидации угла наклона колеса
... поясни цель задачи, это курсовик? может стоит условия поменять ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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
Как долго переменные живут, только в одном кадре, или я в чём-то другом ошибаюсь?
Название: Re: Странное поведение в BGE
Отправлено: Striver от 26 Март 2018, 13:17:34
Цитировать
Как долго переменные живут, только в одном кадре, или я в чём-то другом ошибаюсь?
Куском чего является этот твой код?
Если это внутри какой-либо функции, то все её локальные переменные живут только внутри одного вызова.
Если нужно длительное хранение значения, то это должна быть либо глобальная переменная (для её изменения внутри функции применяется ключевое слово globals), либо она должна быть членом некоего большого объекта (тогда уже он должен быть глобальной переменной) - это может быть экземпляр класса, или, например, словарь.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 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 ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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 вызывающий скрипт, и мои проверки условий годятся только при условии глобальности проверяемых переменных.
Принял. Спасибо за подсказку.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 26 Март 2018, 19:55:32
Куском чего является этот твой код?
Да, по сути, ответом на вызов появления следа за колесом в ответ на его перемещение.
Цитировать
Если это внутри какой-либо функции, то все её локальные переменные живут только внутри одного вызова.
Если нужно длительное хранение значения, то это должна быть либо глобальная переменная (для её изменения внутри функции применяется ключевое слово globals), либо она должна быть членом некоего большого объекта (тогда уже он должен быть глобальной переменной) - это может быть экземпляр класса, или, например, словарь.
Я благодарен за пояснения. Вроде всё очевидно, однако сам это учесть не смог.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 27 Март 2018, 11:40:21

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

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

Да, чуть не забыл. Точку соприкосновения колеса и поверхности тупо вычисляю вычитанием половины размера колеса из его позиции по оси Z. Однако, в связи с наклоном колеса, необходимо учитывать и его, т.е. ещё и изменение позиции по осям X и Y (см. рис. Sled 2.jpg). Как Python можно озадачить этим?
Чем-нибудь сможешь помочь в решении моих проблем?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 27 Март 2018, 17:09:12
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...
... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...
Гоняю и гоняю я этот вездеход, и всё больше и больше мне он нравится.
Как понимаю след просчитывается на один трак? Что собою представляет поверхность, плоскость без толщины или сетка с толщиной необходимой для продавливания/вспучивания? Для следа модификаторы какие-либо использовались или чисто математически решено?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 27 Март 2018, 19:09:59
>> Чем-нибудь сможешь помочь в решении моих проблем?
... мне думается что нужно посчитать некоторую последовательность векторов и матриц, посмотрю подробнее после выходных ...

>> модификаторы какие-либо использовались или чисто математически решено?
... pure mathematics ...
... кстати, этот проект opensources, так что весь код доступен по адресу https://github.com/sungreen/sungreen.github.io/tree/master/projects/veterbot ...
... делалось тоже для себя, на попробовать ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 29 Март 2018, 12:20:21
Очень похоже что я рано в эти дебри свой нос сунул.
Ладно, помоги хоть найти ответы на более простые вопросы, которые уже мною заданы.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 29 Март 2018, 13:30:42
>> Ладно, помоги хоть найти ответы на более простые вопросы, которые уже мною заданы.
... только без паники, повторите вкратце суть вопросов ...
... так или иначе постараемся найти на них решение ...

>> Очень похоже что я рано в эти дебри свой нос сунул.
... в чем предмет опасения? ...
... посмотри функцию alignAxisToVect, если у тебя есть нормаль к поверхности, то попробуй выровнять след по ней ...
https://docs.blender.org/api/blender_python_api_2_77_0/bge.types.KX_GameObject.html?highlight=alignaxistovect#bge.types.KX_GameObject.alignAxisToVect

http://bgepython.tutorialsforblender3d.com/GameObject/alignAxisToVect

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Март 2018, 02:03:48
... вот немного поправил твой код, пример во вложении ...
Код: python
import bge
from mathutils import Vector# из модуля mathutils импортировать Vector     

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)
   
def callback(object, point, normal):
    ob = sc.addObject(sl)
    a = wl.getAxisVect(Vector((0,0,1)))
    ob.worldPosition = object.worldPosition+Vector((0,0,-1))
    ob.alignAxisToVect(a,0,1)
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Март 2018, 06:42:20
... немного поправил, ввёл переменную-вектор z ...
Код: python
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)
   
def callback(object, point, normal):
    ob = sc.addObject(sl)
    a = wl.getAxisVect(z)
    ob.worldPosition = object.worldPosition-z
    ob.alignAxisToVect(a,0,1)


... по ссылкам текстурированная модель и текстура для примера ...
https://yadi.sk/d/OCHmZeXz3TtzUA
https://yadi.sk/i/L17bfQFM3TtzSZ

... мувик ...
https://youtu.be/gHhEOB9tVQk
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Март 2018, 09:32:09
>> Ладно, помоги хоть найти ответы на более простые вопросы, которые уже мною заданы.
... только без паники, повторите вкратце суть вопросов ...
... так или иначе постараемся найти на них решение ... >> Очень похоже что я рано в эти дебри свой нос сунул.
... в чем предмет опасения? ...
... посмотри функцию alignAxisToVect, если у тебя есть нормаль к поверхности, то попробуй выровнять след по ней ...
Николай, паники-то нет никакой. Всё дело в том, что я действительно не программист. Могу создать цикл, могу провести проверку условий, и, по результатам проверки что-то предпринять. Тонкости типа классов, их отличие, структуры и т.д. мне практически неведомы. Я полагал, что возможности Blender снивелируют дефицит знаний и опыта в программировании. В какой-то мере это так и случилось. Однако есть не менее серьёзное препятствие – я зачастую не могу правильно изложить свои затруднения. Опять же из-за малых знаний.
Инженер в расчётах в редких исключениях сам занимается выводом необходимых формул. Чаще пользуется у же выведенными ранее, самим или кем-то, подставляя в них необходимые данные. Этот подход меня уже выручал неоднократно, на него я и сориентирован.
Николай, давай с этой мелодрамой завяжем.
Суть вопросов в следующем.
В предложенном мною рисунке Sled 3.jpg. чётко видно, что нормаль следа не соответствует нормали поверхности в точке соприкосновения, отсюда и ступенчатость. Можно ли привести каким-то способом нормаль следа в соответствие с нормалью поверхности в точке соприкосновения? След ведь на поверхности, следовательно, надо каким-то образом определить направление нормали у поверхности в точке соприкосновения и изменить ориентацию следа в соответствии с точкой соприкосновения.
Цитировать
https://docs.blender.org/api/blender_python_api_2_77_0/bge.types.KX_GameObject.html?highlight=alignaxistovect#bge.types.KX_GameObject.alignAxisToVect
http://bgepython.tutorialsforblender3d.com/GameObject/alignAxisToVect
Выравнивание оси игрового объекта по мировому вектору.
alignAxisToVect(vect, axis, fac – скобка не закрыта из-за опечатки?
vect – в моём случае (0.0, 0.0, -1.0)? Отрицательное направление оси Z
axis – в моём случае 2? Ось Z колеса.
fac – расстояние между предыдущей точкой вывода следа и текущей?
Что получаю в результате расчёта? Насколько я понял, нормаль поверхности в точке соприкосновения ведь не определена, а, следовательно, пока преждевременно след располагать на поверхности?


Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 04:00:15
>> Насколько я понял, нормаль поверхности в точке соприкосновения ведь не определена, а, следовательно, пока преждевременно след располагать на поверхности?
... ответ не однозначен (для меня) - значение точки соприкосновения и нормали формируется во время обратного вызова при обработке коллизии https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks ...
... насколько это значения тебя устроят?! сомневаюсь что полностью ...

>> Выравнивание оси игрового объекта по мировому вектору.
>> alignAxisToVect(vect, axis, fac – скобка не закрыта из-за опечатки?

... где приведён такой текст? ...

>> vect – в моём случае (0.0, 0.0, -1.0)? Отрицательное направление оси Z
... обрати внимание на этот топик http://blender-3d.ru/forum/index.php/topic,326.msg4308.html#msg4308 ...
... тебя не должно это пугать ...
... если у тебя есть z = Vector(0,0,1) , то чтобы получить Vector(0,0,-1) нужно просто использовать -z ...
... в целом в коде у тебя векторные операции будут выглядеть как a = b+c ...

>> axis – в моём случае 2? Ось Z колеса.
... допустим, для следа ответ "да" ...

>>fac – расстояние между предыдущей точкой вывода следа и текущей?
... 1 ...

>> Всё дело в том, что я действительно не программист.
... какой вид деятельности? если не секрет ...

>> Могу создать цикл, могу провести проверку условий, и, по результатам проверки что-то предпринять. Тонкости типа классов, их отличие, структуры и т.д. мне практически неведомы.
... страх, негативный опыт, отрицательная практика или бытовое отвращение к этой категории? по сути класс или структура это некая оболочки скрывающая свои внутренности и не дающая им рассыпаться, но при это весь дружелюбна к внешнему взаимодействию ...
https://docs.blender.org/api/blender_python_api_2_77_0/info_overview.html?highlight=class#manipulating-classes
https://docs.python.org/3/tutorial/classes.html
... но писать собственные классы не всегда требуется, и в большинстве случаев нужно использовать готовы, более того ты это уже делаешь в своём коде ...

>> Я полагал, что возможности Blender снивелируют дефицит знаний и опыта в программировании. В какой-то мере это так и случилось.
... эта печаль рано или поздно догоняет всех и не только в bge, но и в других движках ...

>> Однако есть не менее серьёзное препятствие – я зачастую не могу правильно изложить свои затруднения. Опять же из-за малых знаний.
... пиши больше мелких вопросов и типа "делаю это, не получается" ...
... и выкладывай больше кода и промежуточные модели, это значительно ускоряет решение проблем ...

>> Инженер в расчётах в редких исключениях сам занимается выводом необходимых формул. Чаще пользуется у же выведенными ранее, самим или кем-то, подставляя в них необходимые данные. Этот подход меня уже выручал неоднократно, на него я и сориентирован.
... http://bgepython.tutorialsforblender3d.com/  -  попробуй использовать те примеры, которые уже решены и хорошо себя показали, и в части этой позитивной практики можешь комбинировать элементы этих решений в своих целях ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 04:22:03
... кстати, ты смотрел мувик из моего предыдущего сообщения? ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 07:48:41
... еще немного кода, пример во вложении ...
Код: python
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)
   
def callback(object, point, normal):
    ob = sc.addObject(sl)
    a = wl.getAxisVect(z)
    ob.alignAxisToVect(a,0,1)
    a = ob.getAxisVect(z)
    ob.worldPosition = object.worldPosition
    obj,point,normal = ob.rayCast(ob.worldPosition-a*2)
    if obj:
        print(point)
        ob.worldPosition = point+a*0.03
        ob.alignAxisToVect(normal,2,1)

... получить нормаль к поверхности можно с помощью rayCast
https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=raycast#bge.types.KX_GameObject.rayCast
http://bgepython.tutorialsforblender3d.com/GameObject/rayCast
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 07:58:24
... и твой код с рейкастингом, файл во вложении ...
Код: python
from bge import logic as L  # из модуля bge импортировать logic как L
from mathutils import Vector# из модуля mathutils импортировать Vector     
cont = L.getCurrentController()# получить активный контроллер
own = cont.owner    # получить объект Koleso - владелец контроллера
pos = own.worldPosition # получить позицию колеса
print("6 pos = ", pos)    #
scn =  own.scene    # получить активную сцену Scene
inobjs = scn.objectsInactive    # получить неактивный объект [Plane]
print("9 inobjs = ", inobjs)    #
#вычисление скорости движения объекта
sm = own.get("oldPos", pos) - pos
print("12 sm = ", sm)             #
spd = (sm.x ** 2 + sm.y ** 2) ** 0.5
own["oldPos"] = pos.copy() # .copy() - копирует вектор
print("15 own[oldPos] = ", own["oldPos"], " spd = ",spd)   #
###########настройки#############
sled = 'Plane'   # имя объекта-следа, он находится на скрытом слое
speed = 0.01   #скорость, требуемая для активации
################################
if sled in inobjs and spd >= speed: #если есть объект-след на скрытом слое, а скорость больше или равна указанной
    sled = scn.addObject(inobjs[sled]) # добавить след в сцену
    a = own.getAxisVect(Vector((0,0,1)))
    sled.alignAxisToVect(a,0,1)
    a = sled.getAxisVect(Vector((0,0,1)))
    sled.worldPosition = own.worldPosition
    obj,point,normal = sled.rayCast(sled.worldPosition-a*2)
    if obj:
        sled.worldPosition = point+a*0.03
        sled.alignAxisToVect(normal,2,1)   
    print("25 sled.worldPosition = ", sled.worldPosition)   #

print(" = ")
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 31 Март 2018, 09:42:42
>> Насколько я понял, нормаль поверхности в точке соприкосновения ведь не определена, а, следовательно, пока преждевременно след располагать на поверхности?
... ответ не однозначен (для меня) - значение точки соприкосновения и нормали формируется во время обратного вызова при обработке коллизии https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks ...
... насколько это значения тебя устроят?! сомневаюсь что полностью ...
Открыл ссылку… Здорово, но абсолютно непонятно… В объектном программировании я ноль.
Мне непонятна даже просто последовательность происходящего в модуле.
Возможно представить этот модуль в виде, например, нескольких скриптов – может сопоставление модуля с ними мне что-то разъяснит.
>> Выравнивание оси игрового объекта по мировому вектору.
>> alignAxisToVect(vect, axis, fac – скобка не закрыта из-за опечатки?
... где приведён такой текст? ...
В твоей ссылке http://bgepython.tutorialsforblender3d.com/GameObject/alignAxisToVect в сообщении от 29 Марта 2018, 13:30:42.
Я вижу так:
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 09:46:51
>> Возможно представить этот модуль в виде, например, нескольких скриптов – может сопоставление модуля с ними мне что-то разъяснит.
... посмотри код в сообщении http://blender-3d.ru/forum/index.php/topic,2090.msg29485.html#msg29485 ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 31 Март 2018, 10:32:01
>> vect – в моём случае (0.0, 0.0, -1.0)? Отрицательное направление оси Z
... обрати внимание на этот топик http://blender-3d.ru/forum/index.php/topic,326.msg4308.html#msg4308 ...
... тебя не должно это пугать ...
... если у тебя есть z = Vector(0,0,1) , то чтобы получить Vector(0,0,-1) нужно просто использовать -z ...
... в целом в коде у тебя векторные операции будут выглядеть как a = b+c ...
Погоди гнать, Николай с векторными операциями.
Строка b.normalize() позволяет определить нормаль для вектора b? Мне необходима нормаль к части поверхности (плоскости) в определённой точке. Следовательно, я должен каким-то образом вычленить ту часть поверхности, обозначить её как-то и потом найти её нормаль с помощью «.normalize»? Если я правильно понял, то, как я это должен сделать?

>> Всё дело в том, что я действительно не программист.
... какой вид деятельности? если не секрет ...
Инженер-технолог в цехе холодной обработки металла на опытном производстве.
Цитировать
... страх, негативный опыт, отрицательная практика или бытовое отвращение к этой категории?
Только незнание и отсутствие навыка. Поздно заинтересовался 3D графикой – собственно вынужденно заинтересовался.
Цитировать
... пиши больше мелких вопросов и типа "делаю это, не получается" ...
... и выкладывай больше кода и промежуточные модели, это значительно ускоряет решение проблем ...
Пытаюсь, но не всегда получается.
Цитировать
... http://bgepython.tutorialsforblender3d.com/  -  попробуй использовать те примеры, которые уже решены и хорошо себя показали, и в части этой позитивной практики можешь комбинировать элементы этих решений в своих целях ...
Я так и поступаю. На указанный сайт как попал не помню, может полгода назад, может больше и сразу же его «загнал» в папку «Избранные». Помог он мне знатно.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 10:50:16
>> Инженер-технолог в цехе холодной обработки металла на опытном производстве.
... металлобработка хорошо, технолог ещё лучше, инженер просто отлично ...

>> Строка b.normalize() позволяет определить нормаль для вектора b?
... нет ...

>> Мне необходима нормаль к части поверхности (плоскости) в определённой точке.
... для этого есть rayCast - от объекта исходит луч в сторону поверхности, в ответ получаешь точку соприкосновения и нормаль ...

>> Поздно заинтересовался 3D графикой – собственно вынужденно заинтересовался.
... ранее задавал вопрос "зачем это нужно, какая цель преследуется" ...
... поясни всё-таки зачем тебе 3D, возможно что так будет легче подобрать решение, ты же технолог должен понимать что и в 3D есть разные технологические приёмы, используемые оснастки ...

>> ты посмотрел код из сообщения http://blender-3d.ru/forum/index.php/topic,2090.msg29485.html#msg29485 - да/нет/не знаю? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 31 Март 2018, 12:13:11
>> Строка b.normalize() позволяет определить нормаль для вектора b?
... нет ...
Зашибись. Так что это тогда?
Цитировать
>> Мне необходима нормаль к части поверхности (плоскости) в определённой точке.
... для этого есть rayCast - от объекта исходит луч в сторону поверхности, в ответ получаешь точку соприкосновения и нормаль ...
Была у меня такая попытка – видел описание rayCast.
Применил следующим образом:
Код
import math                 # импортировать модуль math
from bge import logic as L  # из модуля bge импортировать logic как L
from mathutils import Vector# из модуля mathutils импортировать Vector 
from mathutils import Euler # импортировать функцию Euler из модуля mathutils   
cont = L.getCurrentController()# получить активный контроллер
own = cont.owner    # получить объект Koleso - владелец контроллера
pos = own.worldPosition # получить позицию колеса
print("8 pos = ", pos)    #
scn =  own.scene    # получить активную сцену Scene
inobjs = scn.objectsInactive    # получить неактивный объект [Plane]
# print("11 inobjs = ", inobjs)    #
#вычисление скорости движения объекта
puty = own.get("oldPos", pos) - pos # вектор разности между предыдущей и текущей позицией следа
# print("14 puty = ", puty)             #
spd = (puty.x ** 2 + puty.y ** 2) ** 0.5    # пройденный путь колесом
own["oldPos"] = pos.copy() # .copy() - копирует вектор
print("17 spd = ",spd)   #
###########настройки#############
sled = 'Plane' # имя объекта-следа, он находится на скрытом слое
speed = 0.01   # скорость, требуемая для активации
vect = 0, 0, 1   # вектор луча
dist = 2.1   # длина луча
################################
print("25 pos = ", pos)
print("26 own.getAxisVect(vect) = ", own.getAxisVect(vect))
obj, hit, norm = own.rayCast(pos + own.getAxisVect(vect) * dist)
print("28 obj = ", obj, " hit = ",hit, " norm = ",norm)   #
В ответ получил в консоли:
8 pos =  <Vector (0.0091, -1.7135, 1.6152)>
17 spd =  0.03795338797309899
25 pos =  <Vector (0.0091, -1.7135, 1.6152)>
26 own.getAxisVect(vect) =  <Vector (1.0000, 0.0064, 0.0001)>
28 obj =  None  hit =  None  norm =  None
В 27 строке есть pos, есть значение own.getAxisVect(vect), но в ответ ни объекта, ни точки, ни нормали нет. Тогда подумал что это для других случаев.
Николай, так почему у меня не сработало, а у тебя прекрасно работает?
Цитировать
>> Поздно заинтересовался 3D графикой – собственно вынужденно заинтересовался.
... ранее задавал вопрос "зачем это нужно, какая цель преследуется" ...
... поясни всё-таки зачем тебе 3D, возможно что так будет легче подобрать решение, ты же технолог должен понимать что и в 3D есть разные технологические приёмы, используемые оснастки ...
Просто есть проблемы с абстрактным восприятием. Для понимания работы оснастки со сложными траекториями движения нескольких точек. Я просто теряю ориентацию – необходимо иметь возможность наглядной демонстрации, что и в каких ситуациях происходит. BGE, как помощник с возможностью управления в текущем моменте, для этой цели, должен стать незаменимым. По крайней мере, я надеюсь на это.

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 31 Март 2018, 12:57:47
Код
[quote author=Николай Николаев link=topic=2090.msg29485#msg29485 date=1522472304][/quote]
[color=green]Николай, в этой строке что за переменная получается?[/color]
    a = own.getAxisVect(Vector((0,0,1)))
[color=green]Вектор выравнивания по оси Х? В чём смысл?[/color]
    sled.alignAxisToVect(a,0,1)
    a = sled.getAxisVect(Vector((0,0,1)))
    sled.worldPosition = own.worldPosition
    obj,point,normal = sled.rayCast(sled.worldPosition-a*2) [color=green]- что это за значение "-a*2", в чём его смысл?[/color]
    if obj:
        sled.worldPosition = point+a*0.03 [color=green]- а это значение "a*0.03" получено методом "научного тыка"? Работает сразу по трём осям?[/color]
        sled.alignAxisToVect(normal,2,1)   
    print("25 sled.worldPosition = ", sled.worldPosition)   #

print(" = ")
И, ещё:
https://www.youtube.com/playlist?list=PLhoXNQqrCmEfAaTf0AfQ1Ztxmz2DoZiCk
это ответ на твой вопрос, что побудило к изучению BGE. Впечатлился и занялся изучением возможности подобного использования, но с возможностью вмешательства в происходящее.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 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

...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 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, но в твоём случае это бы съело часть следа неровностью смежных полигонов поверхности ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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, но разбираться пока не пытался.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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 в глобальной ориентации в сторону возрастания, т.е. от поверхности с учётом направления колеса? Это нормаль следа?
Николай, я не спорю с тобой – я уточняю правильность своего понимания.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 31 Март 2018, 21:37:08
>> я не спорю с тобой – я уточняю правильность своего понимания.
... у меня нет стопроцентной уверенности, код, который представил, результат экспериментов на понимание ...
... возможно что есть решение в другой последовательности, думаю вместе разберёмся ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Апрель 2018, 06:44:04
... давай вместе порассуждаем ...
... на левой картинке - колесо и две точки касания, А - точка касания середины колеса (допустим поверхность под таким наклоном) и B - точка касания, которую отдаёт обратный вызов коллизии (нарисованный след в ней выглядит нелепо, поскольку точки могут быть и слева и справа) ...
... на правой картинке тоже не очевидно куда пускать луч для определения точки соприкосновения (вниз или ?) ...

... внизу моё представление о скольжении куба и качении шара по наклонной плоскости ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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, но в твоём случае это бы съело часть следа неровностью смежных полигонов поверхности ...
И, всё же. Крутизна склона может быть разной, а потому, если не рассчитывать её фактическое значение в точке, то остаётся подбор коэффициента?
Взгляни на полученные мною картинки. Я, правда, схалтурил – правая и левая картинки выполнены с разным масштабом, но последствия различной крутизны заметны.
Спасибо за помощь и за проявленное терпение. Я очень доволен. Удачи.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Апрель 2018, 11:19:43
>> Вопрос: «длина вектора 1 и радиус вектора 1» - разве это не одно и то же?
... да, ошибка, правильный текст «длина вектора 1 и радиус колеса 1» ...

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

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

>> коэффициент "0.03" мне покоя не даёт, его как-то просчитать можно? Я подозреваю, что он с изменением крутизны склона должен так же меняться, или я неправ?
... если след попадает целиком на плоскость, то это значение может быть очень малым, только для того чтобы обозначить рендеру что след нужно рисовать поверх ...
... этого было бы достаточно, но твоя поверхность, не всегда позволяет это, то есть след будет лежать на двух полигонах, и один из них может быть ориентирован не так как тот по которому рассчитана нормаль ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Апрель 2018, 12:51:06
Николай, я со своим занудством ещё не надоел?
Если не надоел и не отвлекаю от чего-то более интересного тебе, то рискну предложить рассмотрение рельефного следа.
Пристёгиваю файл - немного изменённое колесо всё на той же горке, катящееся вниз по склону. Колесо погружается в поверхность склона на 10 см.
Вот и всё до чего я сам смог додуматься. Далее сетки должны взаимодействовать. Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
Ссылка: http://my-files.ru/krdbgy
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Апрель 2018, 12:57:13
>> Если не надоел и не отвлекаю от чего-то более интересного тебе, то рискну предложить рассмотрение рельефного следа.
... мне через 20 минут коптильню снимать ...

>> Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
... а ты смотрел мувик в конце этого поста http://blender-3d.ru/forum/index.php/topic,2090.msg29474.html#msg29474 это и есть мои соображения на твой вопрос ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Апрель 2018, 15:21:20
... мне через 20 минут коптильню снимать ...
Хм, так у меня ничего не горит... Запросто подождать могу.
Цитировать
>> Можешь поделиться своими соображениями, которыми пользовался создавая след за своим вездеходом?
... а ты смотрел мувик в конце этого поста http://blender-3d.ru/forum/index.php/topic,2090.msg29474.html#msg29474 это и есть мои соображения на твой вопрос ...
А, я, хотел переспросить, что за мувик такой, я должен был посмотреть.
Теперь видел. То, что надо, только не в виде мувика, а в виде blend-файла. Как я понял он уже существует. Что-то мне подсказывает, в нём будет для меня не мало нового и интересного.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Апрель 2018, 16:04:28
Спасибо Николай. Файл тоже увидел. Буду разбираться, хоть этот принцип и не далёк от принципа с текстурой. Я ориентировался на несколько иное, но это потом. Ещё раз спасибо.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 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 года сможешь прочитать?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Апрель 2018, 20:56:40
>> gr.collisionCallbacks.append(callback)      # вызов процедуры callback ???
... нет, в данном случае происходит добавление вызова функции когда случается коллизия ...
... то есть callback не вызывается в этой строке, а добавляется в список и когда на поыверхность что-то падает, то вызывается из этого списка с указанием объекта, точки и нормали соприкосновения ...
... сама же обработка вызовов скрыта внутри bge (это внутренняя логика) ...
https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks

... в целом можно отказаться от глобальных переменных и код с небольшим уточнением будет выглядеть так ...
Код
import bge
from mathutils import Vector# из модуля mathutils импортировать Vector     

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

def init():
    bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
   
def callback(object, point, normal):
    sc = bge.logic.getCurrentScene()   
    sl = sc.objectsInactive['sled']
    ob = sc.addObject(sl)
    a = object.getAxisVect(z)
    ob.alignAxisToVect(a,0,1)
    a = ob.getAxisVect(z)
    ob.worldPosition = object.worldPosition
    obj,point,normal = ob.rayCast(ob.worldPosition-a*2)
    if obj:
        print(point)
        ob.worldPosition = point+a*0.03
        ob.alignAxisToVect(normal,2,1)

... код, модель во вложении ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 10:33:16
>> gr.collisionCallbacks.append(callback)      # вызов процедуры callback ???
... нет, в данном случае происходит добавление вызова функции когда случается коллизия ...
... то есть callback не вызывается в этой строке, а добавляется в список и когда на поыверхность что-то падает, то вызывается из этого списка с указанием объекта, точки и нормали соприкосновения ...
Ну и морока… Как это понять не вызов, а добавление вызова? Где тот список вызовов, в который добавляется, чем и как вызывается из него, в какой строке?
Цитировать
... сама же обработка вызовов скрыта внутри bge (это внутренняя логика) ...
https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks
Ну, и как тут разберёшься? Поневоле приходишь к мысли, тупо использовать строки как формулы в сопромате, с подстановкой своих данных.

Давай вернёмся «к печке» и начнём танец вновь. Николай, поясни такой момент, есть 5 строк:
1. z = Vector((0,0,1))
2. def init():
3.    bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
4. def callback(object, point, normal):
5.    sc = bge.logic.getCurrentScene() 
Как Python их обрабатывает, в какой последовательности? Для каждого кадра? Смысл определения def в чём?

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 11:12:44
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...
... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...
... поэтому у меня интерес к этой теме тоже есть ...
Николай, сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил. Может чем интересна будет тебе.
Blender там какой-то старой версии, наверное какой-нибудь из сороковых, соответственно и Python тоже допотопный. Что один, что другой мне вообще не ведомы, как и их интерфейсы. Пытался разобраться, но эта головоломка оказалась не по силам.
Как думаешь, для BGE подобная идея может быть применима?
Название: Re: Странное поведение в BGE
Отправлено: Striver от 02 Апрель 2018, 11:23:56
Цитировать
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 11:43:30
Цитировать
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Теперь-то ссылку сохранил. Просто хотелось хоть чем-то помочь Николаю.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 12:21:37
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Striver, отсюда делаю вывод:
Есть знание английского, есть опыт литературного перевода, есть знание Blender и Python старых версий и надеюсь современных.
Если это не будет наглостью с моей стороны, то продублирую свою просьбу-вопрос: в современном BGE возможно создание подобного следа?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 12:43:27
def callback(object, point, normal):
 
Николай, в строке в скобках получаемые параметры или передаваемые в функцию? Я так понял что это получаемые в результате работы функции.
Название: Re: Странное поведение в BGE
Отправлено: Striver от 02 Апрель 2018, 13:26:47
Цитировать
Есть знание английского
Вот тут не угадал. Много лет себя пинками под зад заставляю переводить всякую хрень, в надежде, что в голове что-то останется, но эффект минимален.
Цитировать
продублирую свою просьбу-вопрос: в современном BGE возможно создание подобного следа?
К сожалению в BGE я не ориентируюсь, от слова "совсем".
В упомянутой мной книге применяются библиотеки редактора Блендера (Blender, Blender.Mesh, Blender.Object и т.д.), в современных версиях им соответствуют библиотеки bpy.
А для игрового движка используется bge (и тогда использовалась). В ней тут только Николай Николаев разбирается. Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 15:29:37
Цитировать
Есть знание английского
Вот тут не угадал. Много лет себя пинками под зад заставляю переводить всякую хрень, в надежде, что в голове что-то останется, но эффект минимален.
Что-то, да остаётся, просто человек так устроен, что не доволен достигнутым.
Цитировать
Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е. Может я что и путаю, давно это было.
Я, вообще-то, считал Blender более продвинутым чем Max. Не исключаю, что наверно, из-за своих хотелок.
Название: Re: Странное поведение в BGE
Отправлено: Striver от 02 Апрель 2018, 15:43:43
Цитировать
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е.
Т.е. это заранее отрендеренный ролик. Ну так книжка, которую я упомянул, в основном про это, про моделирование и создание анимации. Это и для современных версий Блендера можно переписать.
А игровой движок - совсем другое.
Цитировать
Я, вообще-то, считал Blender более продвинутым чем Max.
У Блендера игровой движок хотя бы есть, но естественно, со своими ограничениями. А про наличие игрового движка в 3D Max'е я не слышал. "Продвинутость" - понятие относительное и субъективное...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Апрель 2018, 17:37:00
Цитировать
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е.
Т.е. это заранее отрендеренный ролик. Ну так книжка, которую я упомянул, в основном про это, про моделирование и создание анимации. Это и для современных версий Блендера можно переписать.
Нет. Очень похоже на запись с экрана, потому как голос за экраном комментировал свои оплошности, и происходило маневрирование авто согласно комментариев.
Для моих целей, впрочем достаточно получить текстурный след. Азарт послужил причиной запроса на возможность создания следа через деформацию сетки.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 02 Апрель 2018, 19:44:14
>>Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.

... это возможно в реальном времени через MehsProxy https://docs.blender.org/api/blender_python_api_2_67_1/bge.types.KX_MeshProxy.html и VertexProxy https://docs.blender.org/api/blender_python_api_2_67_1/bge.types.KX_VertexProxy.html#bge.types.KX_VertexProxy ...
... пример во вложении ...
... код для примера ...
Код
import bge
import random

def init():
    print("Init module\n\n\n")


def order():
    sc = bge.logic.getCurrentScene()
    ob =  sc.objects['Plane']
    ms = ob.meshes[0]
    v = random.randint(0,ms.getVertexArrayLength(0))
    vs = ms.getVertex(0,v)
    vs.z += random.random()/2
    vs.color = [random.random(),random.random(),random.random(),random.random()]
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 05 Апрель 2018, 09:20:13
Николай, я всё же надеюсь получить ответ на мои сообщения « Ответ #46 : 02 Апреля 2018, 10:33:16 » и «Ответ #51 : 02 Апреля 2018, 12:43:27» как маленько освободишься.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 05 Апрель 2018, 13:29:38
#46
... есть игровая логика, когда ты нажимаешь P то запускается игровой движок с этой логикой, в этой логике указано что у тебя установлены коллизии на объекты и если они срабатывают то выполнение программы прерывается и выполняется callback вызов указанной функции ...
... то есть при загрузке модуля функции определяемые заголовком def не выполняются, они выполняются когда происходит какое-либо событие или выполняется условие в игровой логике ...

#51
... этой строке идёт определение функции (def, define), то есть сама функция не выполняется, но определяется её вызов и содержание ...
... далее  по тексту можно вызвать код этой функции многократно ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 05 Апрель 2018, 16:34:19
#46
... есть игровая логика, когда ты нажимаешь P то запускается игровой движок с этой логикой, в этой логике указано что у тебя установлены коллизии на объекты и если они срабатывают то выполнение программы прерывается и выполняется callback вызов указанной функции ...
... то есть при загрузке модуля функции определяемые заголовком def не выполняются, они выполняются когда происходит какое-либо событие или выполняется условие в игровой логике ...
Ладно, со временем разберусь.
И всё же, есть 5 строк:
1. z = Vector((0,0,1))
2. def init():
3.    bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
4. def callback(object, point, normal):
5.    sc = bge.logic.getCurrentScene() 
Как Python их обрабатывает, в какой последовательности? В каждом кадре при вызове контроллером?
Цитировать
#51
... этой строке идёт определение функции (def, define), то есть сама функция не выполняется, но определяется её вызов и содержание ...
... далее  по тексту можно вызвать код этой функции многократно ...
Что такое «идёт определение функции»? Не подскажешь где об этом можно прочитать на нормальном русском языке, а не в электронном переводе?
И, ещё. Просматривая готовые файлы, попадаются такие фрагменты:
VertexShader = """
varying vec4 fragPos;
varying float timer;

void main()
{
   vec3 pos = vec3(gl_Vertex);

    fragPos = ftransform();
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

"""
Текст в тройных кавычках и сами кавычки в текстовом редакторе Blender'а отображаются в красном цвете. Что это означает и как эти строки обрабатывает Python?
Что-то заинтересовало в предложенном мною тексте в переводе Striver’а
 "Написание скриптов для Blender 2.49"?

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 05 Апрель 2018, 19:13:02
... про def:
https://pythonworld.ru/tipy-dannyx-v-python/vse-o-funkciyax-i-ix-argumentax.html

>> Как Python их обрабатывает, в какой последовательности? В каждом кадре при вызове контроллером?
... рассматривай функцию как часть кода, который ограничен от слов def до окончания цепочки операторов ...
... указанная часть кода может быть выполнена в ходе программы вызовом этой функции (можешь представить, что тело этой функции, то есть всю цепочку операторов вставили на место откуда был вызов) ...
... в случае с этими 5 строчками, кроме присвоения z=Vector((0,0,1)), другие строчки не выполняются, а мы просто договариваемся, что у нас будут определены (заготовлены заранее) два куска кода, который мы будем переодически вызывать из другой части программы ...
... init вызывается актуатором Always объекта ground (поверхность), и в ходе выполнения этой функции на ground навешивается обратный вызов при срабатывании коллизии (сами коллизии обрабатывает внутренняя логика bge), поэтому в коде модуля вызова callback нет ...
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 05 Апрель 2018, 21:35:46
Цитировать
И, ещё. Просматривая готовые файлы, попадаются такие фрагменты:
VertexShader = """
varying vec4 fragPos;
varying float timer;


void main()
{
   vec3 pos = vec3(gl_Vertex);


    fragPos = ftransform();
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
}


"""
Текст в тройных кавычках и сами кавычки в текстовом редакторе Blender'а отображаются в красном цвете. Что это означает и как эти строки обрабатывает Python?
Это GLSL https://ru.wikipedia.org/wiki/OpenGL_Shading_Language
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 05 Апрель 2018, 22:17:35
Всем огромное спасибо за помощь. Теперь необходимо чтобы полученная информация уложилась и систематизировалась в голове, а это может быть длительным процессом.
Николай, коль удастся создать след на сетке поверхности, может найдёшь способ его показать? Пока.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 06 Апрель 2018, 02:49:29
>> удастся создать след на сетке поверхности, может найдёшь способ его показать?
... поясни суть вопроса, непонятно же - что и где требуется показать ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Апрель 2018, 07:44:22
>> удастся создать след на сетке поверхности, может найдёшь способ его показать?
... поясни суть вопроса, непонятно же - что и где требуется показать ...
Мой ответ « Ответ #44 : 01 Апреля 2018, 18:44:13 »:
«Документ Ворда 2003 года сможешь прочитать?»
Мой ответ « Ответ #47 : 02 Апреля 2018, 11:12:44 »:
«Николай, сейчас роясь в своих архивах, набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил. Может, чем интересна будет тебе.
Blender там какой-то старой версии, наверное, какой-нибудь из сороковых, соответственно и Python тоже допотопный. Что один, что другой мне вообще не ведомы, как и их интерфейсы. Пытался разобраться, но эта головоломка оказалась не по силам.
Как думаешь, для BGE подобная идея может быть применима?»
Приложил файл «Снова о мешах _ создание отпечатков.doc».
Цитировать
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Николай, суть вопроса, возможно ли создание подобного описанному следу в BGE?»
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 06 Апрель 2018, 13:29:37
... исходя из описания, такое делать можно ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Апрель 2018, 16:36:10
... исходя из описания, такое делать можно ...
Коль надумаешь попробовать, поделишься соображениями (наработками)?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 09 Апрель 2018, 12:52:47
Николай, если есть время, помоги сориентироваться.
Добавил ещё одно колесо и сферу - затеял опробовать ещё один, отличный от первого, след.
Упёрся в непонятку сразу. Почему я не могу отделаться от следа за сферой, ведь я её не пропускаю к образованию следа, или он образуется дублем ещё откуда-то?
Вообще я смогу для сферы использовать другой, отличный от первого, след в данном файле?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 10 Апрель 2018, 01:46:32
>> ведь я её не пропускаю к образованию следа, или он образуется дублем ещё откуда-то?
... на самом деле ты не делаешь этого, посмотри где добавляется след (ob = sc.addObject(sl)), а где ты его не пропускаешь ...
... то есть у тебя след в сцену добавляется без условно, а изменение его положения происходит по условию ...


ps  ещё можно обработчик коллизии цеплять не на поверхность, а к колесу, тогда у сферы не будет этого вызова и следовательно не будет формироваться след ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 10 Апрель 2018, 08:44:54
>> ведь я её не пропускаю к образованию следа, или он образуется дублем ещё откуда-то?
... на самом деле ты не делаешь этого, посмотри где добавляется след (ob = sc.addObject(sl)), а где ты его не пропускаешь ...
... то есть у тебя след в сцену добавляется без условно, а изменение его положения происходит по условию ...


ps  ещё можно обработчик коллизии цеплять не на поверхность, а к колесу, тогда у сферы не будет этого вызова и следовательно не будет формироваться след ...
Понятно, освобожусь немного и посмотрю внимательнее.
Николай, тут проблема родилась из-за возможности использования нескольких видов следов - у колеса это один след, у другого это может быть другой, у сферы - это третий и т.д.
Возможно решение такой задачи? Если возможно, то как осуществить отбор необходимого следа для объекта? Все следы должны быть на разных неактивных слоях или могут быть на одном?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 10 Апрель 2018, 13:28:36
>> Все следы должны быть на разных неактивных слоях или могут быть на одном?
... наверное без разницы ...

>> у колеса это один след, у другого это может быть другой, у сферы - это третий и т.д.
... технологически у каждого колеса может быть свой обработчик коллизий с индивидуальным алгоритмом ...
... или как сейчас - обработчик коллизий прикреплён к поверхности, и чтобы различать в общем обработчике коллизий какой сценарий обработки вызвать, нужно проверять либо дополнительно созданное свойство или например имя объекта, которое передаётся в параметрах вызова обработчика (object) ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 10 Апрель 2018, 20:43:32
>> ведь я её не пропускаю к образованию следа, или он образуется дублем ещё откуда-то?
... на самом деле ты не делаешь этого, посмотри где добавляется след (ob = sc.addObject(sl)), а где ты его не пропускаешь ...
... то есть у тебя след в сцену добавляется без условно, а изменение его положения происходит по условию ...
Всё-таки забавно, я ведь считал, что след добавляется в список объектов сцены ob. Точка вставки объекта sled  в сцену пока не определена, так куда в этом случае вставка производится?
Цитировать
ps  ещё можно обработчик коллизии цеплять не на поверхность, а к колесу, тогда у сферы не будет этого вызова и следовательно не будет формироваться след ...
Николай, я пытался применять к колёсам – взгляни в редактор логики в данном мною файле на блоки с активными колёсами. Неправильный подход к отбору объектов, за которыми должен быть след, сбил меня, и я отказался от этой затеи разъединив связи между блоками.
Сейчас я пошёл по этому пути, учитывая твои замечания. Всё вроде работает так, как я этого хотел. Всё, однако, непонятна странность. Взгляни на распечатку консоли – идёт двойное обращение к модулю. За счёт чего?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 10 Апрель 2018, 20:56:45
На всякий случай даю изменённый файл.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 10 Апрель 2018, 21:11:21
>>Точка вставки объекта sled  в сцену пока не определена, так куда в этом случае вставка производится?
... в ноль ...

>> За счёт чего?
... вот когда ты соединил сенсор с контроллером, что ты ожидал получить? ...
... в этом ответ ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 10 Апрель 2018, 21:26:55
... поясню свой вопрос ...
... ты соединил сенсор с контроллером, который должен вызывать функцию init модуля app ...
... ты сделал это для двух колес, поэтому у тебя при старте дважды вызывается функция init ...
... в функции init идёт назначение обратного вызова callback для коллизии по поверхности ...
... и теперь таких обратных вызова назначено два ...
... отсюда ответ на твой вопрос "за счёт чего" ...
... то есть ты не сделал назначение обратных вызовов для колес, а сделал двойной вызов функции init в которой назначается обратный вызов для поверхности ...

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 10 Апрель 2018, 22:31:28
... поясню свой вопрос ...
... ты соединил сенсор с контроллером, который должен вызывать функцию init модуля app ...
... ты сделал это для двух колес, поэтому у тебя при старте дважды вызывается функция init ...
... в функции init идёт назначение обратного вызова callback для коллизии по поверхности ...
... и теперь таких обратных вызова назначено два ...
... отсюда ответ на твой вопрос "за счёт чего" ...
... то есть ты не сделал назначение обратных вызовов для колес, а сделал двойной вызов функции init в которой назначается обратный вызов для поверхности ...
Николай, так два колеса имеют совершенно разные координаты местонахождения. Так почему коллизия одного колеса дублируется вызовом коллизии второго?
Николай, я в « Ответе #46 : 02 Апреля 2018, 10:33:16 » привёл в пример 5 строк с просьбой разъяснить на этом примере работу модуля. Похоже, что пока не прояснится для меня этот момент, я так и буду блуждать меж трёх сосен.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 11 Апрель 2018, 04:26:51
>> Так почему коллизия одного колеса дублируется вызовом коллизии второго?
... покажи код (или цепочку рассуждений) который подтверждает, что у колеса (колёс) назначена обработка коллизий ...
... просто напиши почему ты считаешь, что у колеса есть вызов обработки коллизий и где это происходит ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 11 Апрель 2018, 07:52:12
>> Так почему коллизия одного колеса дублируется вызовом коллизии второго?
... покажи код (или цепочку рассуждений) который подтверждает, что у колеса (колёс) назначена обработка коллизий ...
... просто напиши почему ты считаешь, что у колеса есть вызов обработки коллизий и где это происходит ...
Сенсор Всегда будирует через контроллер модуль app.init, работу которого я свою очередь и пытаюсь выведать у тебя, ведь в нём есть какая-то закономерность которую можно изложить словами. На мои комментарии ты почему-то не обращаешь внимания и свои не даёшь. Воду в ступе непонятно зачем толчём, только и всего.

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 11 Апрель 2018, 13:32:59
>> Сенсор Всегда будирует через контроллер модуль app.init
... поясни почему Всегда? ...
... это важно, поскольку лучший способ разобраться - это объяснить другому, то есть мне ...
... хочу сразу тебя предупредить, что я категорически заинтересован в том чтобы ты разобрался и готов холить и лилеять твоё желание вникнуть в суть, уверяю искренне ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 11 Апрель 2018, 17:30:40
>> Сенсор Всегда будирует через контроллер модуль app.init
... поясни почему Всегда? ...
Николай, я не понял вопрос. Да потому что именно сенсор "Всегда" объекта wheel каждый кадр, не ожидая событий, через контроллер будирует модуль app.init
Что-то не так?
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 11 Апрель 2018, 18:20:31
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 11 Апрель 2018, 18:52:24
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 11 Апрель 2018, 19:57:37
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
Ну, и почему же?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 11 Апрель 2018, 20:07:56
... это вопросы на понимание, суть не ответить на них, а научить понимать код ...
... если ты уже понял почему app.init это не модуль, а функция init модуля app, и эта функции вызывается только один раз при старте bge и выполняет какую-то "инициализацию", то найди в коде этой "инициализации" строку, которая ответит на твой вопрос ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 11 Апрель 2018, 20:26:12
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
Я вижу другое, два обращения - две инициализации, но несмотря на то что обращения идут от разных объектов, инициализации идут дважды одного и того же объекта. Ну, просто зашибись...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 11 Апрель 2018, 20:42:21
... не зацикливайся на "инициализации" ...
... суть не в ней, а в том что ты сам назначил два вызова функции init модуля app ...
... более того, число формально в вызов этой функции не передаётся никакой объект, то есть говорить о том что идёт инициализация дважды одного и того же объекта не уместно ...
... происходит вызов два раза функции init модуля app и эти два вызова ты сам прописал через логику bge (а на самом деле этого не требовалось) ...

... попробуй изложить текстом последовательность того что должно происходить в твоей программе ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 11 Апрель 2018, 21:36:35
... не зацикливайся на "инициализации" ...
... суть не в ней, а в том что ты сам назначил два вызова функции init модуля app ...
... более того, число формально в вызов этой функции не передаётся никакой объект, то есть говорить о том что идёт инициализация дважды одного и того же объекта не уместно ...
... происходит вызов два раза функции init модуля app и эти два вызова ты сам прописал через логику bge (а на самом деле этого не требовалось) ...

... попробуй изложить текстом последовательность того что должно происходить в твоей программе ...
Погоди Николай. Отменил вызов в одном из колёс. Всё устаканилось, идёт одна инициализация и последовательная обработка объектов. Если в сцене полторы тысячи объектов, а необходимо отслеживать один, то модуль будет все полторы тысячи отслеживать потому что строка
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) этого требует?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 12 Апрель 2018, 02:07:16
>> Если в сцене полторы тысячи объектов, а необходимо отслеживать один, то модуль будет все полторы тысячи отслеживать потому что строка
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) этого требует?

... в этом модуле (по факту текстовый файл с определением функций) определена функция init (название может быть любым другим), в которой выполняется строка bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) ...
... суть этой строки добавить в список функций вызываемых при столкновении объекта с другими объектами наш собственный обработчик https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks ...

... вопрос на внимательность - какому объекту добавляется обработчик? ...

... допустим у тебя играют несколько детей, бросая разные мячи об стену ...
... то есть в сцене присутствует: стена, земля, дети, мячи - и могут быть несколько обработчиков ...
... если обработчик у стены, то он будет реагировать на любой мяч, который об него ударился ...
... обработчик земли будет реагировать на любой мяч и ребёнка, который с ней столкнулся ...
... обработчик меча будет реагировать на стену, землю, ребёнка и другие мячи ...

... если ты вешаешь обработчик на ground, то он будет реагировать на любой объект, который столкнулся с ground ...
... если ты вешаешь обработчик на колесо, то он будет реагировать на любой объект, который столкнулся с колесом ...
(при условии что нет групповых ограничений  https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionGroup и https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionMask ) ...
... допустим у тебя обработчик установлен не на ground, а на колесо wheel  -  bge.logic.getCurrentScene().objects['wheel'].collisionCallbacks.append(callback1) ...
... когда при обработке коллизий столкновения этого объекта будет вызываться функция callback1 (или любая другая, которую ты определишь) ...
... в качестве аргументов при вызове будут приняты аргументы объект - столкновения (а также точка и нормаль) и можно проверить столкнулось ли колесо с ground ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 12 Апрель 2018, 11:47:43
... в этом модуле (по факту текстовый файл с определением функций) определена функция init (название может быть любым другим), в которой выполняется строка bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) ...
Николай, тут такая каверза у меня получилась. В текстовом редакторе есть два текста: SledKoles.py и SledKoles.init. Текст SledKoles.py тот который я не трогаю, а изменения провожу в тексте SledKoles.init, его и инициирует контроллер, по крайней мере я так думал. Однако был здорово удивлён тем что на самом деле контроллер инициировал не SledKoles.init, который я определил для инициализации, а SledKoles.py. Переименовал в SledKol.py и получил ошибку:
Python module can't be imported - object 'ground', controller 'Python':
ImportError: No module named 'SledKoles'.
Получается что ввод в контроллер названия SledKoles.init неправомочен? Если годится только ".py", то ".init" служит для внутримодульной адресации и только, или я опять что-то не так понял? Картинку прицепил.
Цитировать
... допустим у тебя играют несколько детей, бросая разные мячи об стену ...
... то есть в сцене присутствует: стена, земля, дети, мячи - и могут быть несколько обработчиков ...
... если обработчик у стены, то он будет реагировать на любой мяч, который об него ударился ...
... обработчик земли будет реагировать на любой мяч и ребёнка, который с ней столкнулся ...
... обработчик меча будет реагировать на стену, землю, ребёнка и другие мячи ...

... если ты вешаешь обработчик на ground, то он будет реагировать на любой объект, который столкнулся с ground ...
... если ты вешаешь обработчик на колесо, то он будет реагировать на любой объект, который столкнулся с колесом ...
(при условии что нет групповых ограничений  https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionGroup и https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionMask ) ...
... допустим у тебя обработчик установлен не на ground, а на колесо wheel  -  bge.logic.getCurrentScene().objects['wheel'].collisionCallbacks.append(callback1) ...
... когда при обработке коллизий столкновения этого объекта будет вызываться функция callback1 (или любая другая, которую ты определишь) ...
... в качестве аргументов при вызове будут приняты аргументы объект - столкновения (а также точка и нормаль) и можно проверить столкнулось ли колесо с ground ...
Вроде понял. Время покажет, после нескольких применений модулей, так это или что-то не уяснил.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 12 Апрель 2018, 12:22:44
Во, блин. Теперь-то какого рожна ему надо?
Пишет: Python controller found the module but could not access the function - object 'ground', controller 'Python':
AttributeError: module 'SledKoles' has no attribute 'py'
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 12 Апрель 2018, 13:04:13
Если я всё правильно понял, то модули - это функции ( def имя_функции (список параметров функции): ), которые ты определил в файле SledKoles.py
Следовательно, как модули эти функции вызываются так: имя_файла_без расширения_py.имя_функции_в_этом_файле
В твоём случае  модули будут:
SledKoles.init
SledKoles.callback (Но этот, как я понял, даже вызывать не надо, он автоматом вызывается при столкновениях, после инициализации)

Я плохо шарю в ООП, но получается, что при инициализации, ты определённому объекту  добавляешь свой метод обработки функцией callback...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 12 Апрель 2018, 13:29:07
... файл с модулем или текстовый блок должен обязательно иметь расширение .py , без этого работать не будет (например app.py)...
... для указания в контроллере  вызов функции из модуля нужно писать имямодуля.имяфункции (например app.init) ...
https://docs.blender.org/manual/ru/dev/game_engine/logic/controllers/types/python.html#bpy-types-pythoncontroller

>> AttributeError: module 'SledKoles' has no attribute 'py'
... поскольку ты пытаешься запустить функцию py модуля SledKoles, которой в этом модуле нет ...
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 12 Апрель 2018, 13:50:19
Кстати, хотел давно спросить. Николай Николаев, а можно такую "цацку" сделать с рисованием в текстуру в BGE? А то, куча объектов для следа - это будет сильно тормозить, если их не уничтожать со временем... нужно для царапин и следов от выстрелов и холодного оружия... визуализации повреждений противников...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 12 Апрель 2018, 17:05:38
Если я всё правильно понял, то модули - это функции ( def имя_функции (список параметров функции): ), которые ты определил в файле SledKoles.py
Следовательно, как модули эти функции вызываются так: имя_файла_без расширения_py.имя_функции_в_этом_файле
В твоём случае  модули будут:
SledKoles.init
SledKoles.callback (Но этот, как я понял, даже вызывать не надо, он автоматом вызывается при столкновениях, после инициализации)

Я плохо шарю в ООП, но получается, что при инициализации, ты определённому объекту  добавляешь свой метод обработки функцией callback...
Спасибо Samovar, а ведь в каком-то описании мне это попадалось и ты мне сейчас это напомнил. До сих пор я использовал исключительно скрипты, и на модули, собственно, и всё что касалось модулей, читал вполглаза.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 12 Апрель 2018, 17:28:03
... файл с модулем или текстовый блок должен обязательно иметь расширение .py , без этого работать не будет (например app.py)...
... для указания в контроллере  вызов функции из модуля нужно писать имямодуля.имяфункции (например app.init) ...
https://docs.blender.org/manual/ru/dev/game_engine/logic/controllers/types/python.html#bpy-types-pythoncontroller

>> AttributeError: module 'SledKoles' has no attribute 'py'
... поскольку ты пытаешься запустить функцию py модуля SledKoles, которой в этом модуле нет ...
Понял. Исправил. Спасибо за помощь.
Есть желание разобраться со следом через сетки, но с чего начать пока никак не соображу. В принципе, та же горка, только подразделена плотнее. Колесо теперь с шипами - уже есть. Нужна идея для начала разработки, но сразу с возможностью видеть результат хоть в чём-то, хоть на каком-то этапе. Пока ничего путного в голову не приходит.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 12 Апрель 2018, 19:16:49
>> В принципе, та же горка, только подразделена плотнее. Колесо теперь с шипами - уже есть. Нужна идея для начала разработки, но сразу с возможностью видеть результат хоть в чём-то, хоть на каком-то этапе. Пока ничего путного в голову не приходит.
1 брать каждый треугольник меша колеса:
  1.1 для каждого треугольника брать вершину
  1.2 для каждой вершины находить ближайшую вершину на меше горки
  1.3 для найденных вершин на меше горки, если высоты соответствующих вершин колеса находятся ниже высот горки, сделать выбор вершин входящих в треугольную область, определяемую найденными вершинами и присвоит им высоты, рассчитанные линейными пропорциями взятыми из обрабатываемого треугольника колеса ...

... то есть для начала нужно подобрать быстрый алгоритм поиска вершины меша по заданным координатам ...
... сможешь пробить эту тему в Сети? ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 12 Апрель 2018, 19:17:53
>> Николай Николаев, а можно такую "цацку" сделать с рисованием в текстуру в BGE?
... заманчивое предложение ...
... наверное шейдерами можно, попробую посмотреть после выходных ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 12 Апрель 2018, 21:09:06
>> В принципе, та же горка, только подразделена плотнее. Колесо теперь с шипами - уже есть. Нужна идея для начала разработки, но сразу с возможностью видеть результат хоть в чём-то, хоть на каком-то этапе. Пока ничего путного в голову не приходит.
1 брать каждый треугольник меша колеса:
  1.1 для каждого треугольника брать вершину
  1.2 для каждой вершины находить ближайшую вершину на меше горки
  1.3 для найденных вершин на меше горки, если высоты соответствующих вершин колеса находятся ниже высот горки, сделать выбор вершин входящих в треугольную область, определяемую найденными вершинами и присвоит им высоты, рассчитанные линейными пропорциями взятыми из обрабатываемого треугольника колеса ...

... то есть для начала нужно подобрать быстрый алгоритм поиска вершины меша по заданным координатам ...
... сможешь пробить эту тему в Сети? ...
Николай, то, что ты пишешь, наверно следующий этап. Колесо падает на горку и физика остановит падение, сменив его перекатыванием. Здесь ни скрипт, ни модуль не нужны. А вот точку касания колесом горки необходимо определить, и это делать надо через скрипт или модуль. Точка касания колеса, это скорее всего линия по оси Х  имеющая U-образную конфигурацию колеса. Вот наверно с этого момента потребуются твои пункты.
Вопрос: почему треугольники? Тут скорее нужны четырёхугольники. Кстати, если необходимо подразделить поверхность, то Blender её автоматом подразделяет на четырёхугольники, а в случае нужды подразделить на треугольники как это можно сделать?
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 12 Апрель 2018, 22:21:11
Вся игровая графика - это треугольники, а не четырёхугольники и многоугольники, т.к. любая плоскость проходит через 3 точки из курса геометрии...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 08:54:20
Вся игровая графика - это треугольники, а не четырёхугольники и многоугольники, т.к. любая плоскость проходит через 3 точки из курса геометрии...
Samovar, насчёт трёх точек, ты конечно прав, наименьшее количество точек определяющее плоскость - 3. Однако добавь в Blender любой, кроме окружности и икосферы стандартный объект, и, перейдя в режим редактирования, посчитай чего в них больше треугольников или четырёхугольников.
Мой же вопрос в следующем. Грани куба можно вручную разбить на треугольники добавляя рёбра, а если этот куб прошёл подразделение граней, то вручную разбивка на треугольники будет весьма трудоёмка. Есть ли способ в Blender подобной разбивки.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 13 Апрель 2018, 13:21:17
>> Есть ли способ в Blender подобной разбивки.
... в режиме редактирования выделить все полигоны A и далее Ctrl+T ...
Название: Re: Странное поведение в BGE
Отправлено: Striver от 13 Апрель 2018, 13:24:02
Цитировать
Однако добавь в Blender любой, кроме окружности и икосферы стандартный объект, и, перейдя в режим редактирования, посчитай чего в них больше треугольников или четырёхугольников.
Samovar имел ввиду, что все игровые движки (и BGE тоже) все полигоны преобразуют в треугольники, из чего бы ни состоял объект в редакторе Блендера.
Цитировать
Грани куба можно вручную разбить на треугольники добавляя рёбра, а если этот куб прошёл подразделение граней, то вручную разбивка на треугольники будет весьма трудоёмка. Есть ли способ в Blender подобной разбивки.
В режиме редактирования выдели всё и нажми Ctrl-T
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 17:00:29
>> Есть ли способ в Blender подобной разбивки.
... в режиме редактирования выделить все полигоны A и далее Ctrl+T ...
Сработало. Николай, я вопрос, собственно, задал из-за твоего упоминания о треугольниках.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 17:01:24
Цитировать
Однако добавь в Blender любой, кроме окружности и икосферы стандартный объект, и, перейдя в режим редактирования, посчитай чего в них больше треугольников или четырёхугольников.
Samovar имел ввиду, что все игровые движки (и BGE тоже) все полигоны преобразуют в треугольники, из чего бы ни состоял объект в редакторе Блендера.
Цитировать
Грани куба можно вручную разбить на треугольники добавляя рёбра, а если этот куб прошёл подразделение граней, то вручную разбивка на треугольники будет весьма трудоёмка. Есть ли способ в Blender подобной разбивки.
В режиме редактирования выдели всё и нажми Ctrl-T
Спасибо Striver.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 17:10:44
Николай, я уже задавал этот вопрос, но ты почему-то отмолчался (или я ответ проморгал): .worldPosition - это мировая позиция опорной точки объекта?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 13 Апрель 2018, 18:27:41
да
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 18:45:31
Смысл вопроса в том, что колесо, по сути, зубчатое. Значит проминание грунта должно быть неравномерным, т.е. луч здесь видно не подойдёт. Сенсор "Столкновение", а?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 13 Апрель 2018, 19:46:38
... попробуй с этим сенсором, может получится красиво и эффективно, не знаю ...
... в blender можно получить результат разными путями, но мне видится пока только вариант, который был описан ранее ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 13 Апрель 2018, 20:58:30
1 брать каждый треугольник меша колеса:
Давай поэтапно. Треугольник меша колеса касающийся грунта, а как его определить? Я пока могу определить мировую позицию опорной точки этого колеса. Но что это даст?
Через столкновение так же не получается - позиция грунта опять же выдаётся для опорной точки которая неизменна.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 13 Апрель 2018, 21:08:46
... http://blender-3d.ru/forum/index.php/topic,2090.msg29537.html#msg29537 есть ссылки на meshproxy ...
... по идее нужно взять мешь простого протектора, перебрать его треугольники и спроецировать на грунт ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 14 Апрель 2018, 03:38:39
... по ходу, как мне думается, нужно решить следующую задачу и решение должно быть оптимальным ...
... допустим есть двумерный массив 100х100 содержащий 0 ...
... есть три индекса, например [10,10], [25,35],[5,50], которые образуют треугольную область из элементов этого массива ...
... как присвоит 1 элементам массива входящим в эту область? ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 14 Апрель 2018, 14:59:18
Кстати, хотел давно спросить. Николай Николаев, а можно такую "цацку" сделать с рисованием в текстуру в BGE? А то, куча объектов для следа - это будет сильно тормозить, если их не уничтожать со временем... нужно для царапин и следов от выстрелов и холодного оружия... визуализации повреждений противников...

... пока не очень производительно и с использованием PIL для трансформации кисти ...
... PIL нужно ставить дополнительно и копировать в каталог с Blender ...
https://yadi.sk/d/3K7nFMpt3UQbDF

Код
import bge
import random
from PIL import Image
from bgl import Buffer, GL_BYTE


dd = 1024
d2 = dd/2
bb = 128
b2 = 64
ss = 5

sc = bge.logic.getCurrentScene()
ob = sc.objects['ground']
ground = Image.open(bge.logic.expandPath("//ground.png"))
sled = Image.open(bge.logic.expandPath("//brush.png"))

def init():
    ob.collisionCallbacks.append(order)
    addSp(None)
   
def addSp(ob):
    sp = sc.objectsInactive["Sphere"]
    sp = sc.addObject(sp)
    sp.worldPosition = (random.random()*ss-ss/2,random.random()*ss-ss/2,7)
    if ob:
        ob.endObject()


def order(object, point, normal):
    x = int((1.0+point.x/ss)/2*dd-b2)
    y = int((1.0-point.y/ss)/2*dd-b2)
    image = ground
    sleds = image.crop((x,y,x+bb,y+bb))
    for i in range(int(random.random()*7+3)):
        brush = sled.copy()
        r = 180*random.random()
        s = int(random.random()*bb)
        brush = brush.rotate(r)
        brush = brush.resize((s,s))
        sleds.paste(brush,(0,0),brush)
       
    image.paste(sleds,(x,y))

    image = image.convert("RGB")
    image = image.transpose(Image.FLIP_TOP_BOTTOM)
    idata = image.tobytes()
    ibuff = Buffer(GL_BYTE,len(idata),idata)

    if "buff" not in ob:
        ob["buff"] = bge.texture.ImageBuff()
    ob["buff"].load(ibuff,dd,dd)
   
    bge.logic.texture = bge.texture.Texture(ob,0)
    bge.logic.texture.source =  ob["buff"]
    bge.logic.texture.refresh(True)
    addSp(object)
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 14 Апрель 2018, 21:18:19
Спасибо Николай Николаев за пример, попробую разобраться, но PIL вряд ли подойдёт по причине тормознутости...
Возможно PIL заменить на что-то из этого?

https://docs.blender.org/api/2.79/bge.render.html (http://blender-3d.ru/forum/go.php?url=aHR0cHM6Ly9kb2NzLmJsZW5kZXIub3JnL2FwaS8yLjc5L2JnZS5yZW5kZXIuaHRtbA==)
https://docs.blender.org/api/2.79/bge.texture.html (http://blender-3d.ru/forum/go.php?url=aHR0cHM6Ly9kb2NzLmJsZW5kZXIub3JnL2FwaS8yLjc5L2JnZS50ZXh0dXJlLmh0bWw=)

или из OpenGL более шустрое?
https://docs.blender.org/api/2.79/bgl.html (http://blender-3d.ru/forum/go.php?url=aHR0cHM6Ly9kb2NzLmJsZW5kZXIub3JnL2FwaS8yLjc5L2JnbC5odG1s)
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 14 Апрель 2018, 21:27:01
>> Возможно PIL заменить на что-то из этого?
... по сути можно напрямую рисовать в шейдерах ...
... PIL, как пример, нужен для манипуляции с пиксельным буфером и насколько понял, то существенное ограничение производительности на этапе подмены текстуры ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 20 Апрель 2018, 15:28:42
>> Есть ли способ в Blender подобной разбивки.
... в режиме редактирования выделить все полигоны A и далее Ctrl+T ...
Николай, если я ещё не совсем надоел, то хочу поделиться ещё одной проблемой со следом (всё никак мне покоя не даёт моя горка с колесом). Тут такая петрушка получается. На малых скоростях, т.е. когда колесо катится с горки без понуждения, то след ложится ровно, однако если это колесо понуждать к ускорению, то с определённого момента след становится пунктирным. Думаю что колесо за один кадр проходит большее расстояние чем размер следа. Участить обращение к модулю возможно? Вроде и так сенсор "Всегда" будирует контроллер. Можно, конечно, удлинить плоскость с текстурой следа, но тогда при малых скоростях, будет не след а мазня.
И, ещё непонятка. Колесо скатывается с горки в пропасть и... оставляет за собой следы в пространстве. Как это может быть, ведь столкновения в полёте не происходят?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 20 Апрель 2018, 16:45:57
Николай, я тут подумал, может как-то можно удлинять или укорачивать след в зависимости от скорости движения колеса? Правда этот вариант тоже мне не нравится - текстура ведь тоже будет неравномерной. С другой стороны её особо разглядывать-то некогда, но всё же.
Что бы ты порекомендовал, может какой другой вариант подскажешь?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 20 Апрель 2018, 20:52:58
>>  если я ещё не совсем надоел
... нет никакой необходимости оправдываться, смело задавай вопросы и если ответа не последовала пробуй их задать ещё раз ...

>> Участить обращение к модулю возможно? Вроде и так сенсор "Всегда" будирует контроллер.
... суть в том, что ты не понял что "Всегда" тут не причём ...
... "Всегда" срабатывает один раз и вызывает не модуль, а функцию модуля (по ходу модуль инициализируется, но для тебя важен именно вызов функции модуля) ...
... для того чтобы решить задачу тебе нужно отчасти восстановить ту логику которую ты использовал ранее но в контексте модуля ...
... то есть - запоминать точку соприкосновения (которая сформировалась в результате срабатывания коллизии) и далее при следующем срабатывании коллизии заполнять путь от старого значения соприкосновения до нового с учётом длины следа, после чего новое значение нужно поместить на место ранее запомненного и ждать очередного срабатывания коллизии ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Апрель 2018, 10:00:09
>>  если я ещё не совсем надоел
... нет никакой необходимости оправдываться, смело задавай вопросы и если ответа не последовала пробуй их задать ещё раз ...
Принято. Просто терпеть не могу зануд, а сам сейчас занудствую, пытаясь расставить все точки над i. Некомфортно чувствую себя.
Цитировать
>> Участить обращение к модулю возможно? Вроде и так сенсор "Всегда" будирует контроллер.
... суть в том, что ты не понял что "Всегда" тут не причём ...
... "Всегда" срабатывает один раз и вызывает не модуль, а функцию модуля (по ходу модуль инициализируется, но для тебя важен именно вызов функции модуля) ...
... для того чтобы решить задачу тебе нужно отчасти восстановить ту логику которую ты использовал ранее но в контексте модуля ...
... то есть - запоминать точку соприкосновения (которая сформировалась в результате срабатывания коллизии) и далее при следующем срабатывании коллизии заполнять путь от старого значения соприкосновения до нового с учётом длины следа, после чего новое значение нужно поместить на место ранее запомненного и ждать очередного срабатывания коллизии ...
Предыдущая позиция следа:
 ob.worldPosition =  <Vector (2.7682, -72.6654, 0.0300)>
Следующая позиция следа:
 ob.worldPosition =  <Vector (2.7792, -73.0450, 0.0300)>
Расстояние между позициями (0.011, 0.3796). Расстояние по оси X в данном случае не имеет значения, а вот по оси Y = 37.96 см. при длине следа 24 см. образуется прогал между следами в 13.96 см.
Если я буду располагать след через 24 см, то прогал будет наращиваться, и в конечном итоге, след будет значительно отставать от колеса. По крайней мере, я так понял твоё предложение. А вот если для этой скорости расположить след длиной 40 см., то, по идее, прогала между следами уже не должно быть.
Подскажи в чём я неправ, что упускаю? Если я прав, то каким образом я могу изменять длину следа в зависимости от скорости движения колеса?
Да, по поводу образования следа в пропасти, можешь что-либо предположить?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Апрель 2018, 12:43:25
>> Если я буду располагать след через 24 см ... А вот если для этой скорости расположить след длиной 40 см
... у тебя след фиксированной ширины, располагать его нужно через одинаковый интервал с учётом запаса на поворот ...
... пусть у тебя уже есть траектория следа со всеми точками - какой алгоритм заполнение этой траектории элементами (следами)? ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Апрель 2018, 16:08:04
... добавлю рассуждалок ...
... допустим у тебя v1 - текущее значение позиции, v0 - предыдущее (v1,v0 - это Vector), sl - длина следа ...
тогда
dv = v1-v0
ds = dv.length
if(ds>sl): #если участок больше длины следа, то нужно рисовать промежуточные следы
   n = int(ds/sl)
   dss = ds/n
   for i=0 to range(n):
        vt = v0 + dss*i
        vt - это точка в которой нужно рисовать след
        ... далее код рисования следа
        ...

после этого всегда рисовать в v1

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Апрель 2018, 18:23:44
... пусть у тебя уже есть траектория следа со всеми точками - какой алгоритм заполнение этой траектории элементами (следами)? ...
Вопрос не понял.
Цитировать
if(ds>sl): #если участок больше длины следа, то нужно рисовать промежуточные следы
   n = int(ds/sl)
Беру 37.96 см. и делю 24 см. и n получаю равным 1. Нет?
Какой в этом случае смысл цикла:
 for i=0 to range(n):
        vt = v0 + dss*i
Николай, я что-то совсем поплыл. След-то по-прежнему 24 см., а пройденный участок без малого 38 см.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Апрель 2018, 19:19:09
>> Вопрос не понял.
>> Николай, я что-то совсем поплыл.

... признаю, что в изложенный алгоритм имеет некоторые скользкие моменты ...
... но это можно без труда поправить ...
... чтобы внести ясность и очевидность, попробуй текстом (простыми русскими фразами) изложить своё видение того как заполнить следами траекторию состоящую из нескольких фрагментов разной длины ...

... и чтобы понять где скользкость алгоритма из предыдущего поста попробуй на бумаге отработать не один, а, допустим, 5 отрезков равной длины по 38 см ...
... хотя в последующем наверное следует внести изменения dss=ds/(n+1) и vt=v0+dss*(i+1), и в самом начале, когда v0 = None просто нарисовать след в v1, а в конце не рисовать ...

v0 = None

def test(v1):
   if(v0 is None):
      рисовать след в v1
   else:
      dv = v1-v0
      ds = dv.length
      if(ds>sl): #если участок больше длины следа, то нужно рисовать промежуточные следы
         n = int(ds/sl)
         dss = ds/(n+1)
         for i=0 to range(n):
             vt = v0 + dss*(i+1)
             vt - это точка в которой нужно рисовать след
        ... далее код рисования следа
        ...
   v0 = v1
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Апрель 2018, 12:06:27
>> Вопрос не понял.
>> Николай, я что-то совсем поплыл.

... признаю, что в изложенный алгоритм имеет некоторые скользкие моменты ...
... но это можно без труда поправить ...
... чтобы внести ясность и очевидность, попробуй текстом (простыми русскими фразами) изложить своё видение того как заполнить следами траекторию состоящую из нескольких фрагментов разной длины ...

... и чтобы понять где скользкость алгоритма из предыдущего поста попробуй на бумаге отработать не один, а, допустим, 5 отрезков равной длины по 38 см ...
... хотя в последующем наверное следует внести изменения dss=ds/(n+1) и vt=v0+dss*(i+1), и в самом начале, когда v0 = None просто нарисовать след в v1, а в конце не рисовать ...

v0 = None

def test(v1):
   if(v0 is None):
      рисовать след в v1
   else:
      dv = v1-v0
      ds = dv.length
      if(ds>sl): #если участок больше длины следа, то нужно рисовать промежуточные следы
         n = int(ds/sl)
         dss = ds/(n+1)
         for i=0 to range(n):
             vt = v0 + dss*(i+1)
             vt - это точка в которой нужно рисовать след
        ... далее код рисования следа
        ...
   v0 = v1
Погоди Николай, к коду давай вернёмся позже. Ты хоть определи что такое промежуточный след. След это плоскость определённого размера с определённой текстурой (рисунком), а промежуточный-то след это что за зверь такой?
Ещё вопрос: в строке
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
можно назначить столкновения только с одним объектом (в данном случае ground) или возможно назначить несколько объектов? Если возможно, то как назначить несколько объектов. Катится моё колесо по горке - тут объект столкновения ground. Скатилось оно с горки и попало в другую среду где будет уже другой объект столкновения ground2, ground3 ... ground22 - как быть? Ведь его надо ещё распознать. Замкнутый круг получается.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Апрель 2018, 14:16:13
>> ... чтобы внести ясность и очевидность, попробуй текстом (простыми русскими фразами) изложить своё видение того как заполнить следами траекторию состоящую из нескольких фрагментов разной длины ...
... сможешь сделать? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Апрель 2018, 17:08:15
>> ... чтобы внести ясность и очевидность, попробуй текстом (простыми русскими фразами) изложить своё видение того как заполнить следами траекторию состоящую из нескольких фрагментов разной длины ...
... сможешь сделать? ...
Настаиваешь на своём предложении? Хорошо. Колесо, находясь над определённой точкой поверхности передаёт следу проекцию своих координат на неё. След располагается на поверхности согласно переданных ему координат, и выравнивается в соответствии с нормалью данной точки координат поверхности. След занимает точно ту поверхность, которую он имеет по проектным данным.
В следующем кадре, колесо, находясь над другой точкой поверхности передаёт следу проекцию своих координат на неё. Тот в свою очередь опять занимает поверхность. Однако, если расстояние между проекциями точек колеса больше длины следа, то образуются пробелы, коль меньше длины следа, происходит наложение следов. Ну, и т.д.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Апрель 2018, 17:35:05
>> Однако, если расстояние между проекциями точек колеса больше длины следа
... то есть у тебя уже есть след в двух соседних точках и тогда найди точку между ними и добавь туда след ...
... если расстояние будет большим, то рассчитай количество нужных следов и добавь их ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Апрель 2018, 20:05:34
>> Однако, если расстояние между проекциями точек колеса больше длины следа
... то есть у тебя уже есть след в двух соседних точках и тогда найди точку между ними и добавь туда след ...
... если расстояние будет большим, то рассчитай количество нужных следов и добавь их ...
Николай, да в том-то и дело, что между следами расстояние значительно меньше самого следа. При малой скорости - следы устанавливаются вплотную. С увеличением скорости, после определённых значений, появляются интервалы между следами равные десятым долям размера следа. С дальнейшим увеличением скорости увеличиваются и интервалы между следами. Смотри рисунок. У меня получались интервалы примерно до 0.9 размера следа. В то же время при низких скоростях, я сейчас рассмотрел, идёт наложение следов последующим на предыдущий. В работе BGE не видно, а вот на скрине, да с увеличением весьма заметно.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Апрель 2018, 20:40:18
>> появляются интервалы между следами равные десятым долям размера следа.
... причина этого появления? только одна - расстояние между v1 и v0 больше следа, не так ли? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 23 Апрель 2018, 07:11:21
Николай, да в том-то и дело, что между следами расстояние значительно меньше самого следа. При малой скорости - следы устанавливаются вплотную. С увеличением скорости, после определённых значений, появляются интервалы между следами равные десятым долям размера следа. С дальнейшим увеличением скорости увеличиваются и интервалы между следами. Смотри рисунок. У меня получались интервалы примерно до 0.9 размера следа. В то же время при низких скоростях, я сейчас рассмотрел, идёт наложение следов последующим на предыдущий. В работе BGE не видно, а вот на скрине, да с увеличением весьма заметно.
>> появляются интервалы между следами равные десятым долям размера следа.
... причина этого появления? только одна - расстояние между v1 и v0 больше следа, не так ли? ...
Толчём воду в ступе?
Я уже писал 22 Апреля 2018, 14:16:13
Цитировать
Однако, если расстояние между проекциями точек колеса больше длины следа, то образуются пробелы, коль меньше длины следа, происходит наложение следов.
К чему переспрашиваешь?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 23 Апрель 2018, 11:10:26
Ещё вопрос: в строке
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
можно назначить столкновения только с одним объектом (в данном случае ground) или возможно назначить несколько объектов? Если возможно, то как назначить несколько объектов. Катится моё колесо по горке - тут объект столкновения ground. Скатилось оно с горки и попало в другую среду где будет уже другой объект столкновения ground2, ground3 ... ground22 - как быть? Ведь его надо ещё распознать. Замкнутый круг получается.
И, всё же Николай, есть какие-то соображения по этому вопросу?
Может кто из знатоков Blender знает? Поделитесь своими соображениями - буду очень признателен.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 23 Апрель 2018, 12:31:37
Ещё один вопрос: в строке sl = sc.objectsInactive['Sled'] производится активация объекта находящегося на невидимом слое. В силу каких-то причин, уже активированный объект становится ненужным как активированный (ненужный в сцене).
Могу я его деактивировать, если да, то как?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 23 Апрель 2018, 13:30:31
>> К чему переспрашиваешь?
... а почему ты не хочешь поделить это расстояние пополам и добавить туда след? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 23 Апрель 2018, 16:05:22
>> К чему переспрашиваешь?
... а почему ты не хочешь поделить это расстояние пополам и добавить туда след? ...
Николай, я что-то не пойму твою мысль. Расположились два следа, заполнив часть поверхности. Между ними промежуток в 0.3 длины следа. Добавляем в этот промежуток, прямо в его центр что? След? След перекроет не только промежуток, но и предыдущий и последующий след на 0.35 их длины, нарушит рисунок.
Ну, погляди на рисунок «Без имени 4.jpg». В нижней его части, из-за малой скорости, идёт вполне заметное наложение последующих следов на предыдущие следы. В верхней части, с возрастанием скорости движения колеса, появляются промежутки. Я не понимаю почему, но при дальнейшем увеличении скорости следы в какой-то момент образуют опять сплошной след, а при дальнейшем увеличении скорости опять появляются промежутки.
Я добросовестно пытался заснять этот момент, но лучший момент так и не получился – очень большой фрагмент следа требуется.
Николай, ты извини, конечно, за вопрос: у тебя проблемы с русским языком? Ты можешь без ненужных многоточий последовательно развивать свою мысль. Ведь постоянно приходится в угадайку играть, пытаясь понять, куда ты клонишь и что пытаешься сказать? Я не претендую уж на высоко литературный язык, но обычным-то, разговорным языком можешь пояснять или запаса слов не хватает, потому к многоточиям прибегаешь? Ещё раз извини.
Я очень буду тебе благодарен, если ты найдёшь возможность пояснять разговорным языком.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 23 Апрель 2018, 17:43:23
>> но и предыдущий и последующий след на 0.35 их длины, нарушит рисунок.
... ненарушение рисунка - это ограничение, о нём не было заявлено ранее ...
... соблюсти это ограничение легко если имеется поступательное движение перед, но при поворотах будут разрывы - с ними что делать? ...

... можешь нарисовать  и прикрепить рисунок как должна быть заполнена траектория состоящая из 5-6 сегментов разной произвольной длины следами ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 23 Апрель 2018, 18:20:45
... можно ввести оценку остатка от кратного деления пройденного пути на длину следа ...

v0 = None
ss = 0

def test(v1):
   if(v0 is None):
      рисовать след в v1
   else:
      dv = v1-v0
      ds = dv.length
      dv = dv/ds
      ss += ds
      while(ss>sl):
         vt = v0 + dv*sl
         vt - это точка в которой нужно рисовать след
        ... далее код рисования следа ...
        ss-=sl
        v0 = vt
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 25 Апрель 2018, 06:54:47
... да, нужно признать, что проблемы в понимании есть, причём эти проблемы с обеих сторон,  но для того форум и существует, чтобы решать эти проблемы в живом общении (надеюсь, что никто не сомневается в искренности такого общения) ...
... на вопрос почему некоторые вопросы решаются долго или не решаются вообще - отвечу что любая задача должна быть конкретная, измеряемая, достижимая, согласованная и определена во времени ...
... но в целом, например, меня устраивает перманентное будирование темы и исследовательская неопределённость результата на текущий момент, но при адекватной активности ...
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 27 Апрель 2018, 10:44:54
Novichok, ты ж прочёл до того как наш мудрый админ удалил... неприятно, правда ? :) А прикинь, каково тем людям, которые пытались тебе помочь, и в итоге нарвались на твои непонимание и грубость? :)
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 09:31:12
Всем привет. Третий десяток лет живём при капитализме, а авралы как были так и остались - вчера только прилетел из командировки. Однако нет худа без добра. Предоставился случай опробовать на практике свой полученный навык в отслеживании.
Николай, тут такая проблема появилась. Мне необходимо отследить перемещение точек. След точки линия. Поскольку линия находится на плоскости Sled, то при вращении сцены по трём осям создаётся ситуация когда взгляд направлен вдоль оси Х или Y, или под очень острым углом к ним, ну и соответственно след становится невидимым. По закону подлости, след оказался невидим именно там, где видеть его просто необходимо.
Можешь предложить что-то, что сделает след (в данном случае линию) видимым вне зависимости от направления взгляда?
Вернёмся к нашим "баранам", к нашей "угадайке".
... можно ввести оценку остатка от кратного деления пройденного пути на длину следа ...

v0 = None
ss = 0

def test(v1):
   if(v0 is None):
      рисовать след в v1
   else:
      dv = v1-v0
      ds = dv.length
      dv = dv/ds
      ss += ds
      while(ss>sl):
         vt = v0 + dv*sl
         vt - это точка в которой нужно рисовать след
        ... далее код рисования следа ...
        ss-=sl
        v0 = vt
Вернулся к предложенному тобой файлу Sled 5.blend. Добавил простенькую текстуру для следа в виде вложенных квадратов и обнаружил что на малых скоростях идёт сплошное наложение следов одного на другой.
Здорово получилось, ты привёл код, который по идее должен упорядочить наложение текстур, а он в свою очередь привлёк моё внимание на формирование следа - всё с точностью до наоборот, по идее я должен был спросить как уйти от наложений, а ты дать код.
Ладно, это всё лирика.
В файл вставил код, уж извини, как угадал. Есть ошибки. Одна из которых постоянное значение (v0 is None) =  True, меня не пускает дальше.
Если не очень занят, то посмотри где я накуралесил. Файл прицепил.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 09:44:55
Novichok, ты ж прочёл до того как наш мудрый админ удалил... неприятно, правда ? :) А прикинь, каково тем людям, которые пытались тебе помочь, и в итоге нарвались на твои непонимание и грубость? :)
Не понял, что за наезд, кому и какая грубость?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Апрель 2018, 10:34:04
>> Можешь предложить что-то, что сделает след (в данном случае линию) видимым вне зависимости от направления взгляда?
... поменяй форму следа, например небольшой кубик или пирамидку ...

>> Вернёмся к нашим "баранам", к нашей "угадайке"
... в целом в коде много путаницы, и самое главное отсутствие связи, например "... далее код рисования следа ..."  имеется в виду что в этом блоке происходит вызов кода, который добавляет след в сцену, а у тебя след добавляется всегда, как только срабатывает коллизия, далее по тексту была замена ds на ls (этого не нужно делать, то есть это совершенно разные сущности) ...

>> (v0 is None) =  True, меня не пускает дальше.
... так немного выше в коде ты написал v0 = ...

... предлагаю перейти на уровень алгоритма, уточнить логику и вернуться к коду ...
... напиши текстом своё видение, как должен формироваться след, это важно чтобы сначала сформировалось общее представление о ходе процесса, а потом уже реализация в коде ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Апрель 2018, 10:37:52
... кстати, а вы на работе используете какие-нибудь схемы или технологические карты? может тебе будет легче рисовать логику, чем описывать ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 12:21:06
>> Можешь предложить что-то, что сделает след (в данном случае линию) видимым вне зависимости от направления взгляда?
... поменяй форму следа, например небольшой кубик или пирамидку ...
Опа, я думал об использовании трёх плоскостей в трёх осях с точкой в месте их пересечения, но как расположить в них след (линию) ничего придумать не смог.
Николай, а если использовать куб, то это как? Сделать его грани прозрачными и в районе опорной точки создать точку, это я наверно смогу, но нужна-то линия при полной непредсказуемости её направления, точнее зависимости от её произошедшего перемещения.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 12:38:32
... кстати, а вы на работе используете какие-нибудь схемы или технологические карты? может тебе будет легче рисовать логику, чем описывать ...
Технологические карты, графики, задания и т.д. это моя работа. Как руководитель подразделения даю направления при поручении разработки.
Разработку логических схем видел неоднократно у компьютерщиков, но их заморочки меня по работе вообще никак не касаются. Для меня это квадратики, треугольнички, линии и только, хоть я и отдаю себе отчёт что это логические и условные связи.
Тьфу на неё, на работу, давай уж лучше по-простому, на разговорном уровне с минимальным количеством угадаек. Мне так проще разбираться.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Апрель 2018, 12:43:36
>> с минимальным количеством угадаек. Мне так проще разбираться.
... изложи своё видение последовательности "рисования" следа (по шагам) ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 14:37:31
>> Вернёмся к нашим "баранам", к нашей "угадайке"
... в целом в коде много путаницы, и самое главное отсутствие связи, например "... далее код рисования следа ..."  имеется в виду что в этом блоке происходит вызов кода, который добавляет след в сцену, а у тебя след добавляется всегда, как только срабатывает коллизия, далее по тексту была замена ds на ls (этого не нужно делать, то есть это совершенно разные сущности) ...
Каким образом выполняется вызов подпрограмм?
ls это переменная длины следа которую я ввёл. Что такое ds ты ведь не удосужился пояснить, вот я и понял что это дельта следа.
Цитировать
>> (v0 is None) =  True, меня не пускает дальше.
... так немного выше в коде ты написал v0 = ...
v0 = None что ли? А, где я должен был это определить? Ты же опять ничего на этот счёт не пояснил. Я рассматривал вариант определения блоке def init():. Меня Python отматюгал, только и всего.
Николай, ты извини меня, но если бы я своим подчинённым пояснял что они должны выполнить, так как это делаешь ты, то скорее всего уже много лет, как студентка-практикантка носил бы бумажки на подпись специалистам из смежных отделов. Ну, пойми ты мой уровень правильно, я новичок который только-только приступает к знакомству с Python и его методами разработки модулей с которыми столкнулся вообще впервые. То, что читал, прояснения мне не дало - оно видно рассчитано на подготовленного человека.
Со скриптами справляюсь поскольку когда-то давно имел скупую практику в Basic и Pascal.
Если тебе такой "фрукт" как я не по зубам, то скажи об этом и я не стану тебя с подобными целями отвлекать. Буду обращаться с вопросами попроще, которые двумя-тремя словами можно пояснить.
Цитировать
... предлагаю перейти на уровень алгоритма, уточнить логику и вернуться к коду ...
... напиши текстом своё видение, как должен формироваться след, это важно чтобы сначала сформировалось общее представление о ходе процесса, а потом уже реализация в коде ...
Если это имеет смысл, то на словах это могу сформулировать примерно так.
В точке касания поверхности колесом устанавливается объект след с предварительной его инициацией, переводом из невидимого слоя в сцену. След выверяется согласно нормали от точки касания колесом поверхности.
В следующем кадре проверяется следующая точка касания на предмет касания поверхности или следа. Коль касание поверхности, то устанавливается объект след, точно так же, как и предыдущий. Коль касание затрагивает объект след, то необходимо перейти к следующему касанию.
Собственно на большой скорости, увидев промежутки между следами я воспринял всё это так, потому и пошёл по пути создания нескольких следов с разной длиной. Кстати, действительно можно создавать на невидимом слое несколько объектов и инициировать их по именам. Я делал их до 6 штук.
Однако, в коде происходит какая-то свистопляска выражаемая тем, что при той же скорости, то следы идут последовательно, то вдруг начинается наложение следов друг на друга с очень малым смещением друг на друге.
Я, собственно, потому и решил начать "танец опять от печки" - от Sled5.blend, и разобраться сначала с наложением следов друг на друга при малой скорости, используя последний вариант предложенного тобою кода.
Как-то так.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Апрель 2018, 15:06:21
>> Если это имеет смысл, то на словах это могу сформулировать примерно так.


1) В точке касания поверхности колесом устанавливается объект след с предварительной его инициацией, переводом из невидимого слоя в сцену.
// это происходит всегда в точке касания? откуда берётся точка касания?

2) След выверяется согласно нормали от точки касания колесом поверхности.
// да

3) В следующем кадре проверяется следующая точка касания на предмет касания поверхности или следа.
// исходя из логики сенсоров (в контексте этого случая) нет никакого следующего кадра, а что есть?

4) Коль касание поверхности, то устанавливается объект след, точно так же, как и предыдущий.
// да, при условии что пройдено достаточное расстояние для размещения следа

5) Коль касание затрагивает объект след, то необходимо перейти к следующему касанию.
// где осуществляется переход к следующему касанию?


по ходу - допустим у тебя есть две точки касания v0 и v1, между ними 2.2 метра, длина следа 0.4 метра - как будешь заполнять траекторию? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 30 Апрель 2018, 16:15:57
1) В точке касания поверхности колесом устанавливается объект след с предварительной его инициацией, переводом из невидимого слоя в сцену.
// это происходит всегда в точке касания? откуда берётся точка касания?
в 11-той строке
Цитировать
3) В следующем кадре проверяется следующая точка касания на предмет касания поверхности или следа.
// исходя из логики сенсоров (в контексте этого случая) нет никакого следующего кадра, а что есть?
Наверно то что осталось необъяснённым.
Цитировать
5) Коль касание затрагивает объект след, то необходимо перейти к следующему касанию.
// где осуществляется переход к следующему касанию?
Наверно там же, в том что осталось необъяснённым. Я трижды задавал вопрос о том как Python отслеживает построчный текст программы, но ты как партизан - тайну не выдал.
Цитировать
по ходу - допустим у тебя есть две точки касания v0 и v1, между ними 2.2 метра, длина следа 0.4 метра - как будешь заполнять траекторию? ...
Николай, ты мне укажи номера тех ответов, в которых ты мне все свои вопросы уже объяснял. Вот интересно, много найдёшь?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 30 Апрель 2018, 20:32:45
>> Вот интересно, много найдёшь?
... да, но не в этом суть, посмотри ещё один тестовый вариант во вложении ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Май 2018, 10:03:33
>> Вот интересно, много найдёшь?
... да, но не в этом суть, посмотри ещё один тестовый вариант во вложении ...
Лихо! Всё-таки, Николай, ты меня поражаешь. На мой, дилетанта взгляд, код красив, следовательно, и красив алгоритм. Я думаю, что в первую очередь у тебя родился алгоритм, а уж потом подобрался код. Однако алгоритм ведь и есть пояснения к коду. Ну что мешает его вписать в код в качестве комментариев? Банальная лень? Вроде не логично, ведь помогаешь сам, добровольно, с желанием помочь. Тогда что мешает?
Ладно, опять меня на лирику потянуло.
По коду. Всё же Николай, помоги разобраться с твоим модулем. Ну, постарайся поподробнее ответить на мои вопросы.
Строки 5-7 – назначение переменных. Как я понял, происходит один раз. Когда? Эти переменные локальны или глобальны в этот момент?
Строка 9: def init(): - побуждается контроллером в ответ на сенсор «Всегда». Тут наверно вопрос по работе BGE. Как я понимаю, BGE систематически обновляет кадр. Отсюда сенсор «Всегда», так же покадрово должен возбуждать контроллер и соответственно часть модуля def init():. Однако ранее где-то ты утверждал, что эта часть модуля работает единожды. Что-то тут не вяжется. Попытайся понятнее изложить свою мысль.
Строка 14 – global v0, ls почему назначение глобальными переменных производится здесь а не в 5-7 строках, не в блоке init?
Строка 19… Как фрагмент можно прокомментировать:
while((v1-v0).length>ls):   # пока расстояние между точками больше длины следа
            dv = v1-v0      # переменная dv расстояние между точками
            dv/= dv.length      # ? ? ?
            v0 = v0+dv*ls      # ? ? ?

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Май 2018, 10:25:01
v0 = v0+dv*ls  или если красивее, то v0+=dv*ls , что означает прибавить к вектору v0 вектор dv*ls , где dv*ls это произведение вектора на число (по сути умножение элементов вектора на одно и тоже число) ...
dv/=dv.length - означает деление вектора dv на число (длину самого вектора, по идее нормализация) ...
dv = v1-v0 никак не является расстоянием между точками, поскольку это вектор разности между точками, а вот длина этого вектора dv и есть расстояние ...
http://blender-3d.ru/forum/index.php/topic,326.msg4308.html#msg4308

while((v1-v0).length>ls):   # пока расстояние между точками больше длины следа

Строка 14 – global v0, ls почему назначение глобальными переменных производится здесь а не в 5-7 строках, не в блоке init? - это не назначение, а указание что в указанном цепочке кода эти переменных нужно считать глобальными

>> Строка 9: def init(): - побуждается контроллером в ответ на сенсор «Всегда». Тут наверно вопрос по работе BGE. Как я понимаю, BGE систематически обновляет кадр. Отсюда сенсор «Всегда», так же покадрово должен возбуждать контроллер и соответственно часть модуля def init():. Однако ранее где-то ты утверждал, что эта часть модуля работает единожды. Что-то тут не вяжется. Попытайся понятнее изложить свою мысль.
... моя мысль такая - мне нужно инициализировать переменные, для этого в начале работы требуется запустить эту процедуру, без разницы каким способом, главное один раз при старте ...
... можешь сделать это любым другим доступным способом ...

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

>> Ну что мешает его вписать в код в качестве комментариев? Банальная лень?
>> код красив, следовательно, и красив алгоритм.
... это нарушает красоту кода, да-да, мне не нравятся комментарии, поскольку код становится не читаемым, чем меньше текста, тем легче код для понимания ...



Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Май 2018, 11:50:33
... упростил пару строк ...
Код: python
import bge
from mathutils import Vector

v0 = None
up = Vector((0,0,1))
ls = 0.4
sc = bge.logic.getCurrentScene()
sl = sc.objectsInactive['sled']

def init():
    bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
   
def callback(object, point, normal):
    global v0
    v1 = object.worldPosition
    if v0 is None:
        v0 = v1.copy()
    else:
        while((v1-v0).length>ls):
            v0 += (v1-v0).normalized()*ls
            ob = sc.addObject(sl)
            vW = object.getAxisVect(up)
            ob.alignAxisToVect(vW,0,1)
            vS = ob.getAxisVect(up)

            ob.worldPosition = v0
            obp,point,normal = ob.rayCast(v0-vS*2)
            if obp:
                ob.worldPosition = point+vS*0.03
                ob.alignAxisToVect(normal,2,1)

алгоритм
1) при старте bge запустить инициализацию, задать начальные значения глобальных переменных, назначить коллизию для "земли"
2) ждать передачи управления от обработчика коллизий, при обработке коллизии - проверить значение v0, если None - то задать равным текущему положению объекта и (*), иначе пункт 3
3) проверить расстояние между текущим положением v1 объекта и старым положением объекта, если больше длины следа выполнить пункт 4 иначе (*)
4) переместить старое положение v0 на длину следа в направлении текущего положения v1, нарисовать след исходя из положения объекта в v0, вернуться к пункту 3
(*) передать управление обработчику коллизий вернуться в пункт 2
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Май 2018, 18:50:20
v0 = v0+dv*ls  или если красивее, то v0+=dv*ls , что означает прибавить к вектору v0 вектор dv*ls , где dv*ls это произведение вектора на число (по сути умножение элементов вектора на одно и тоже число) ...
dv/=dv.length - означает деление вектора dv на число (длину самого вектора, по идее нормализация) ...
dv = v1-v0 никак не является расстоянием между точками, поскольку это вектор разности между точками, а вот длина этого вектора dv и есть расстояние ...
http://blender-3d.ru/forum/index.php/topic,326.msg4308.html#msg4308

while((v1-v0).length>ls):   # пока расстояние между точками больше длины следа
 
М-м, да-а… Вектор это конечно круто, но я отвечу так же как в ответе 2 в твоей ссылке ответил LanuHum. Взгляни.
Пытался уже несколько раз понять, что это такое, но видно с абстрактным мышлением у меня что-то не так, но может быть и простое отсутствие практики, так что давай пока замнём для ясности – dv и есть расстояние, ну и славненько.
Николай, я про .length спрашивал: как-то увидеть возможные параметры объекта после точки можно?
Цитировать
Строка 14 – global v0, ls почему назначение глобальными переменных производится здесь а не в 5-7 строках, не в блоке init?
[/color] - это не назначение, а указание что в указанном цепочке кода эти переменных нужно считать глобальными
Назначение или указание это не меняет причины места объявления, ведь я спрашиваю именно о причине. Ох, Николай.
Цитировать
>> Строка 9: def init(): - побуждается контроллером в ответ на сенсор «Всегда». Тут наверно вопрос по работе BGE. Как я понимаю, BGE систематически обновляет кадр. Отсюда сенсор «Всегда», так же покадрово должен возбуждать контроллер и соответственно часть модуля def init():. Однако ранее где-то ты утверждал, что эта часть модуля работает единожды. Что-то тут не вяжется. Попытайся понятнее изложить свою мысль.
... моя мысль такая - мне нужно инициализировать переменные, для этого в начале работы требуется запустить эту процедуру, без разницы каким способом, главное один раз при старте ...
... можешь сделать это любым другим доступным способом ...
При старте, это при запуске BGE?
Николай, эта часть модуля (init()) работает единожды при выполнении всей программы, или всё же она работает каждый раз при обновлении кадра, при срабатывании сенсора «Всегда» и контроллера «Python»?
А, какими ещё способами можно запустить?
Цитировать
>> первую очередь у тебя родился алгоритм, а уж потом подобрался код
... несколько раз спрашивал тебя о наличии алгоритма, ведь для него не требуется код, это же абстракция ...
Николай, так я каждый раз отвечал, по крайней мере, схематично описывал последовательность, поскольку я не знаю, что в твоём понимании является алгоритмом. Последний раз в ответе #144 : 30 Апреля 2018, 12:43:36  на который ты мне ответил анализом моего алгоритма в своём ответе #145 : 30 Апреля 2018, 15:06:21
Цитировать
>> Ну что мешает его вписать в код в качестве комментариев? Банальная лень?
>> код красив, следовательно, и красив алгоритм.
... это нарушает красоту кода, да-да, мне не нравятся комментарии, поскольку код становится не читаемым, чем меньше текста, тем легче код для понимания ...
Опять меня на лирику потянуло. Я тебе сейчас много ужасов напишу.
Николай, ты у меня несколько раз интересовался моей сферой занятости, моими знаниями, позволь узнать то же самое о тебе.
В частности, ты кодируешь, получая задание от потребителя, или по вдохновению создаёшь код, а уж потом ищешь потребителя на него?
Если получаешь задание и затем его выполняешь, то очевидно приходится работать с техническим заданием? Или как оно там у вас именуется?
Сдавая работу, ты пишешь пояснительную записку? Указываешь выходные параметры разработанного тобою блока? Потребитель имеет право производить какие-либо изменения в твоей разработке применительно к своим потребностям?
Если твои ответы на мои вопросы положительны, то, как ты умудряешься обходиться без комментариев, устно потребителю поясняешь?
Красота, миниатюрность, конечно эффектны, но они осложняют понимание твоей идеи и в целом твоего кода. Осложняют, а не облегчают.
Скажу честно, наши потребители выпускаемого нами продукта без пояснительной записки его просто не примут, хоть процесс порою элементарен, типа вставить болванку в патрон; выставить болванку с допуском по биению до такого-то размера; закрепить болванку; отторцевать… , и т.д.
Всё это связано с человеческим фактором, с опасностью для жизни человека. Программа не убьёт человека, скажешь? А если твой блок применят там, где сбой в нём сможет убить или причинить огромный экономический ущерб?

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 01 Май 2018, 19:59:41
>> как-то увидеть возможные параметры объекта после точки можно?
... да, https://docs.blender.org/api/2.79/mathutils.html?highlight=mathutils#mathutils.Vector ...

>> Назначение или указание это не меняет причины места объявления, ведь я спрашиваю именно о причине
... в строке 14 - global v0, ls указывается, что эти переменные нужно считать глобальными, которые были объявлены в другой области видимости https://www.8host.com/blog/ispolzovanie-peremennyx-v-python-3/ ...

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

https://wiki.blender.org/index.php/Doc:/Tutorials/Game_Engine/ScriptMode_vs_ModuleMode
https://wiki.blender.org/uploads/6/6f/Game_Engine_VisualOverview.png


>> А если твой блок применят там, где сбой в нём сможет убить или причинить огромный экономический ущерб?
... насколько в курсе, то у нас здесь форум, а не служба технической поддержки, то есть живое человеческое общение ...
... по большому счёту и если мне не изменяет память здесь нет профессиональных программистов, которые зарабатывают себе кодом на хлеб, поэтому приветствуется конструктивный диалог по типу "делают вот так, не получается вот это, в чём может быть проблема" ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 01 Май 2018, 20:10:24
>> А если твой блок применят там, где сбой в нём сможет убить или причинить огромный экономический ущерб?
... насколько в курсе, то у нас здесь форум, а не служба технической поддержки, то есть живое человеческое общение ...
... по большому счёту и если мне не изменяет память здесь нет профессиональных программистов, которые зарабатывают себе кодом на хлеб, поэтому приветствуется конструктивный диалог по типу "делают вот так, не получается вот это, в чём может быть проблема" ...
Я же написал: потянуло на лирику.
А по поводу комментариев, ты не прав - точность комментария только подчёркивает красоту кода. Думаю что я не одинок в этом мнении.
Необходимо время "переварить" полученную информацию, хоть и не в полном,  как запросил, объёме.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Май 2018, 09:02:00
... насколько в курсе, то у нас здесь форум, а не служба технической поддержки, то есть живое человеческое общение ...
... по большому счёту и если мне не изменяет память здесь нет профессиональных программистов, которые зарабатывают себе кодом на хлеб, поэтому приветствуется конструктивный диалог по типу "делают вот так, не получается вот это, в чём может быть проблема" ...
Николай, пока я "перевариваю" к слову пришёлся этот фрагмент нашей переписки. Вполне допускаю что на данном форуме нет профессиональных программистов, педагогов, а есть интересующиеся Blender'ом участники форума. Однако совсем неплохо бы ещё учитывать раздел форума, а он называется "Вопросы от новичков". Кому-то из новичков достаточно просто подсказать или дать готовый код, и он будет счастлив этим (я себя отношу к таким), а кому-то этого мало, им необходимо "докопаться до корней", вот комментарии таким необходимы как воздух (я иногда бываю таким).
Ладно, это опять лирика - пошёл "переваривать".
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 02 Май 2018, 12:29:22
... так ты лирик или технолог? в целом это хорошая идея сделать форум человечнее и дружелюбнее, возьмись за разработку, организацию этого процесса, разработай технологию гуманного вспоможения новичкам, обучи волонтёров форума этой позитивной практике ...
... можно на тебя рассчитывать в этом деле? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Май 2018, 18:51:55
... так ты лирик или технолог? в целом это хорошая идея сделать форум человечнее и дружелюбнее, возьмись за разработку, организацию этого процесса, разработай технологию гуманного вспоможения новичкам, обучи волонтёров форума этой позитивной практике ...
... можно на тебя рассчитывать в этом деле? ...
Я технолог по холодной обработке металла а не педагог - специфика несколько иная. А вот идею сделать форум человечнее и дружелюбнее поддерживаю целиком и полностью, ведь на сколько я понимаю, в оказании помощи конкурировать ни к чему.
Николай, твоя подсказка, сделать куб в качестве следа (точки), похоже будет работать вкупе с твоим последним кодом - выйду на работу попробую на практике. Ещё раз спасибо за помощь.
По коду. Взгляни на картинку во вложении. Как только поверхность заканчивается, след подскакивает вверх, как думаешь, почему? Вроде за пределами поверхности образование следов не должно быть, а здесь, мне думается, ещё 3 следа образуются уже за пределами поверхности.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 02 Май 2018, 19:02:16
... а как в целом поступать в тех случаях когда колесо отрывается от земли? например трамплин, есть рассуждения по этому поводу или алгоритм? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Май 2018, 19:54:41
... а как в целом поступать в тех случаях когда колесо отрывается от земли? например трамплин, есть рассуждения по этому поводу или алгоритм? ...
Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 02 Май 2018, 20:29:01
>> Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.
... как узнать место отрыва? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 02 Май 2018, 20:51:02
>> Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.
... как узнать место отрыва? ...
Очевидно в 13 строке должны прекратиться вызовы callback.

Извиняюсь, я уже на вставлял строк. В строке:
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 03 Май 2018, 01:59:13
... допустим вызов прекратиться, навсегда? и как его прекращение влияет на определение места отрыва? ...
... как узнать математически находилось ли колесо в воздухе между двумя точками, которые получены в результате обработки коллизий? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 03 Май 2018, 06:58:55
... допустим вызов прекратиться, навсегда? и как его прекращение влияет на определение места отрыва? ...
Место последнего вызова является местом отрыва.
Цитировать
... как узнать математически находилось ли колесо в воздухе между двумя точками, которые получены в результате обработки коллизий? ...
Не понял вопроса, это как? Коль есть касание, то есть и то чего касается. Коль нечего касаться откуда появится касание?
Ну, Николай, даёшь стране угля... Переформулируй вопрос чтобы понятно было о чём спрашиваешь.

Николай, всё же интересное кино получается. Запустил BGE. Ну и пошло поехало:
Blender Game Engine Started
3 !!!!!!!!!!! SledKoles.py
11 !!!!!!!!!!! SledKoles.init
16 !!!!!!!!!!! SledKoles.callback
19 v1 =  <Vector (-0.3827, -0.0079, 2.0442)>
16 !!!!!!!!!!! SledKoles.callback
19 v1 =  <Vector (-0.3799, -0.0168, 2.0432)>
16 !!!!!!!!!!! SledKoles.callback
Что инициировало запуск 3 строки? Как BGE узнал что необходимо к ней обратиться?
11 строку запустил контроллер. 11 строка вызывает 16-ую, тоже понятно.
Непонятно что в дальнейшем запускает 16-ые строки.
Предполагаю что запущенная 11 строка продолжает в автономном режиме работу по отслеживанию столкновений на протяжении всей работы BGE?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 03 Май 2018, 18:33:53
>> Что инициировало запуск 3 строки? Как BGE узнал что необходимо к ней обратиться?
... при первом обращении
http://blender-3d.ru/forum/index.php/topic,2090.msg29956/topicseen.html#msg29956
http://blender-3d.ru/forum/index.php/topic,2090.msg29614/topicseen.html#msg29614

>> 11 строку запустил контроллер. 11 строка вызывает 16-ую, тоже понятно.
... нет, 11 строка не вызывает 16 http://blender-3d.ru/forum/index.php/topic,2090.msg29618/topicseen.html#msg29618 ...

>> Непонятно что в дальнейшем запускает 16-ые строки.
Предполагаю что запущенная 11 строка продолжает в автономном режиме работу по отслеживанию столкновений на протяжении всей работы BGE?
... да, и вот уже BGE обраружив коллизию сделает соответствующий обратный вызов callback http://blender-3d.ru/forum/index.php/topic,2090.msg29574/topicseen.html#msg29574  ...

... все ответы на вопросы уже были приведены в топике, но это не снимает с меня ответственности за не внятность объяснения, а лишь подчёркивает определённую сложность обсуждаемой темы ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 03 Май 2018, 18:47:13
... все ответы на вопросы уже были приведены в топике, но это не снимает с меня ответственности за не внятность объяснения, а лишь подчёркивает определённую сложность обсуждаемой темы ...
Бывает что тупость одолевает, грешен.
И всё же, какие-то соображения есть по поводу появления следов за пределами поверхности?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 03 Май 2018, 19:10:34
... "ихтамнет", это не про эти следы? скорее это именно subj, поэтому дополнительно нужно проверить находилось ли колесо в воздухе между двумя точками ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 03 Май 2018, 20:58:03
... "ихтамнет", это не про эти следы? скорее это именно subj, поэтому дополнительно нужно проверить находилось ли колесо в воздухе между двумя точками ...
Скорее "ихтанедолжнобыть". Что за зверь такой "subj"?
Николай, я не понимаю о каких ты точках пытаешь меня.
В файле я расставил принты, на мой взгляд они пишут все необходимые точки.
3D-курсор установил примерно на конечной точке возможного проявления следа.
В наборе окон "По умолчанию", запусти BGE в пользовательском окне и увидишь эти три следа которых не может быть, а в консоли их координаты.
Последние три следа с большей разницей по оси Z, чем предыдущие.
Что за выкрутас, не пойму.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 04 Май 2018, 03:08:50
>> Скорее "ихтанедолжнобыть". Что за зверь такой "subj"?
http://lurkmore.to/%D0%A1%D0%B0%D0%B1%D0%B6

>> Николай, я не понимаю о каких ты точках пытаешь меня.
... v0 и v1, по сути старое и новое положение колеса/следа ...

>> Что за выкрутас, не пойму.
... мы не ожидаем проявление коллизии в этом месте, но по каким-то причинам оно происходит ...
... 1) либо искать причины недолжного поведения, 2) или ставить костыль (например на "Последние три следа с большей разницей по оси Z, чем предыдущие.") ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 04 Май 2018, 09:18:13
... мы не ожидаем проявление коллизии в этом месте, но по каким-то причинам оно происходит ...
... 1) либо искать причины недолжного поведения, 2) или ставить костыль (например на "Последние три следа с большей разницей по оси Z, чем предыдущие.") ...
А я всё думал и гадал что такое на вашем языке "костыль".
Склонен к первому варианту, ведь причина какая-то есть. Видно какая-то "корявинка" в коде себя проявляет.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 05 Май 2018, 10:22:45
... ещё один вариант во вложении для обсуждения ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Май 2018, 10:06:30
Каким образом выполняется вызов подпрограмм?
Николай, ты мне не ответил или я прозевал ответ?
Вообще в Python существует такое понятие как подпрограмма?
Есть блок кода, что-то выполняющий, к которому возможно обратиться из разных участков кода. Подозреваю что с помощью def, но не представляю как это грамотно оформить вплоть до отступов.

Вариант во вложении сейчас посмотрю.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Май 2018, 10:38:41
Николай, ещё момент. Стрелкой на изображении во вложении я указываю на тень от колеса. Пока я буду "играть в угадайку" с кодом, может укажешь на причину сохранения этой тени, какой-то наворот в BGE или что-то с материалом или светом в свойствах?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 06 Май 2018, 11:26:45
>> может укажешь на причину сохранения этой тени
... это тень от следа, логично её отключить ...

>> Есть блок кода, что-то выполняющий, к которому возможно обратиться из разных участков кода.
Код: python
#определение
def sq(x):
     return x*x

#использование
a = sq(3)
print(sq(2))
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 07 Май 2018, 10:01:07
>> может укажешь на причину сохранения этой тени
... это тень от следа, логично её отключить ...
Да, действительно это тень от следа. Взгляни на изображение во вложении.
Я не думаю, что мне придётся использовать след в таком виде и с таким высоким требованием к нему. Так, для общего понятия, я уточнял
Цитировать
>> Есть блок кода, что-то выполняющий, к которому возможно обратиться из разных участков кода.
Код: python
#определение
def sq(x):
     return x*x

#использование
a = sq(3)
print(sq(2))
С возможностью использования части кода как функции понятно. Однако мой интерес несколько иной. Мне интересна возможность многократного использования части кода из разных мест кода.
Немного не корректным примером может служить такая ситуация:
Есть десятка полтора колёс, находящихся в разных местах холмистой поверхности катящихся в разных направлениях и оставляющих свои следы.
Для рисования текстурированных следов необходима приводимая тобою часть кода. Для рисования следов с деформированием сетки поверхности потребуется другая часть кода. Для рисования какого-то другого вида следа потребуется третья часть кода. Короче, подобно бейсиковским go to и go sub что-то есть?
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 07 Май 2018, 10:10:51
Цитировать
Короче, подобно бейсиковским go to и go sub что-то есть?
Это давно считается дурным тоном и путаницей, потому вряд ли... (сейчас такое только на ассемблере)
Я не вполне шарю в Python, но думаю, что когда ты объявил функции в BGE даже разными скриптами, то они становятся доступны в других скриптах во время исполнения...
надо пробовать...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 07 Май 2018, 13:26:33
>> Короче, подобно бейсиковским go to и go sub что-то есть?
>> Это давно считается дурным тоном и путаницей, потому вряд ли...
... скорее всего да ...

>> Для рисования текстурированных следов необходима приводимая тобою часть кода. Для рисования следов с деформированием сетки поверхности потребуется другая часть кода. Для рисования какого-то другого вида следа потребуется третья часть кода.

... использовать словарь ...
http://rupython.com/switch-python-116.html

... или назначить для разных объектов свои функции-обработчики  ...

Код: python
def p1():
    print("p1")

def p2():
    print("p2")

def p3():
    print("p3")
   

a = p1
a()

a = p2
a()

a = p3
a()
Название: Re: Странное поведение в BGE
Отправлено: Striver от 07 Май 2018, 14:07:17
Цитировать
http://rupython.com/switch-python-116.html
Страшная ссылка. Даже не знаю, что страшнее, слитый в одну строку и потому убитый питоновский код, или текст, автоматически переведённый на псевдорусский язык...

Цитировать
Короче, подобно бейсиковским go to и go sub что-то есть?
А как бы ты в Бейсике выбирал, где это самое go to поставить? Наверняка перед ним будет некое условие, что-то вроде
Цитировать
if a=4 then
   goto 150
if a=6 then
   goto 180
Ну так и в Питоне можно по-простому написать
Цитировать
if a==4:
    p1()
if a==6:
    p2()
где p1 и p2 - ранее определённые функции (например, как в коде от Николай Николаев)
Если таких веток условий совсем много (хотя бы больше 3), то можно диспетчеризацию через словарь сделать, но пока лучше по-простому через ifы сделай.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 07 Май 2018, 17:30:31
Цитировать
http://rupython.com/switch-python-116.html
Страшная ссылка. Даже не знаю, что страшнее, слитый в одну строку и потому убитый питоновский код, или текст, автоматически переведённый на псевдорусский язык...
Да уж... А человек тратил своё время...

Samovar, Николай, Striver, спасибо за пояснения. Вроде понял. Пока нужды такой нет, просто интересно было, но при случае, для закрепления, обязательно опробую.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 07 Май 2018, 21:02:15
Тут такой вопрос нарисовался, строка
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
определяет объект столкнувшийся с объектом ground. Код располагает поверх ground'а объект Sled. При повторном следовании по колее, эта строка опять ведь будет видеть объект ground. А, может эта строка определять столкновение с несколькими объектами, например с ground и Sled. Для чего это надо пока не знаю, но интересно, есть такая возможность или нет?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 08 Май 2018, 12:44:44
if not 'w0' in db:
        db['w0'] = w1.copy()
        return
Инструкция  return здесь для чего? Что будет без неё?
Название: Re: Странное поведение в BGE
Отправлено: Striver от 08 Май 2018, 14:07:26
Цитировать
Инструкция  return здесь для чего? Что будет без неё?
Просто return без возвращаемого значения просто возвращает управление из функции туда, откуда она вызвана.
Имеет смысл, если в функции после этой строки есть ещё что-то, но нужно это проигнорировать.
Если пустой return находится в конце функции, он, фактически не нужен, без него будет работать точно также (хотя я обычно предпочитаю его ставить)
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 08 Май 2018, 17:16:18
Цитировать
Инструкция  return здесь для чего? Что будет без неё?
Просто return без возвращаемого значения просто возвращает управление из функции туда, откуда она вызвана.
Имеет смысл, если в функции после этой строки есть ещё что-то, но нужно это проигнорировать.
Если пустой return находится в конце функции, он, фактически не нужен, без него будет работать точно также (хотя я обычно предпочитаю его ставить)
Спасибо Striver за пояснение, просто я не понял его смысла в данном коде, потому и решил уточнить.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 15 Июнь 2018, 12:47:53
... ещё один вариант во вложении для обсуждения ...
Всем привет. Николай, коль эту тему ещё с контроля не снял и есть время и желание, то хочу продолжить обсуждение появившихся у меня проблем с текстурным следом.
Ранее знакомился с возможностью моделирования авто. Так попробовал внедрить возможность следа от четырёх колёс на основе полученных от тебя знаний. Попробовал, и сразу же получил по зубам. Подозреваю, что причина в том, что столкновение колёс с грунтом по каким-то причинам не распознаётся, соответственно проверить работу кода прямо с первых строк проверить не могу. Буду очень признателен, коль поможешь в устранении моей ошибки.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 15 Июнь 2018, 22:13:11
... приветствую ...
... у тебя колеса у колёс установлен тип физического представления No Collision, то есть отключено физическое столкновение и поэтому ничего не происходит ...
https://docs.blender.org/manual/ru/dev/game_engine/physics/types/no_collision.html?highlight=collision#no-collision-physics
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 16 Июнь 2018, 16:44:18
... приветствую ...
... у тебя колеса у колёс установлен тип физического представления No Collision, то есть отключено физическое столкновение и поэтому ничего не происходит ...
https://docs.blender.org/manual/ru/dev/game_engine/physics/types/no_collision.html?highlight=collision#no-collision-physics
Вот жеж блин, все настройки проверил, а в физику не посмотрел. Спасибо за подсказку. Николай, ты наверно видел что следы становятся на ребро? Сейчас мне чуть недосуг, на буднях попытаюсь разобраться откуда ноги растут у этой проблемы. Если не разберусь (что более всего вероятно) опять к тебе за помощью обращусь. Не возражаешь?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 16 Июнь 2018, 16:47:29
>> Не возражаешь?
... на сколько в курсе, на этом форуме нет каких-либо ограничений на количество задаваемых вопросов ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 18 Июнь 2018, 02:29:17
... кстати, если у тебя теперь 4 колеса, то можно изменить логику происходящего - не нужно вычислять по отдельности направления луча для определения нахождения следа, поскольку эти лучи перпендикулярны плоскости платформы автомобиля и только выходят из центров колес ...
... и условие рисования следа можно упростить, проверив лишь расстояние от центра колеса до точки пересечения луча с землёй, например чтобы оно было не больше 1,05 радиуса колеса ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 18 Июнь 2018, 09:58:52
>> Не возражаешь?
... на сколько в курсе, на этом форуме нет каких-либо ограничений на количество задаваемых вопросов ...
Тут важно чтобы не было ограничений для желания ответить ;D
Николай, в строке:
Код
vu = vw.cross(dw).normalized()
print("74 vu = ", vu, " w1 = ", w1)
В консоли выводится: 74 vu =  <Vector (1.0000, -0.0000, -0.0000)>
Вектор нормали направлен в положительную сторону оси Х - зачем?
Он, вроде должен быть направлен в отрицательную сторону оси Z?
Не по этой причине в строке
Код
obp,point,normal = object.rayCast(w1+2*vu)
находится объект столкновения Car, а не ground?
Ещё странность, след появляется на внутренней стороне колёс со стороны пассажира.
object здесь ведь колесо.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 18 Июнь 2018, 10:13:40
... кстати, если у тебя теперь 4 колеса, то можно изменить логику происходящего - не нужно вычислять по отдельности направления луча для определения нахождения следа, поскольку эти лучи перпендикулярны плоскости платформы автомобиля и только выходят из центров колес ...
... и условие рисования следа можно упростить, проверив лишь расстояние от центра колеса до точки пересечения луча с землёй, например чтобы оно было не больше 1,05 радиуса колеса ...
А нормали для следа? К тому же всхолмленность поверхности, наличие/отсутствие поверхности под одним или несколькими колёсами?
Однако код интересно посмотреть и попробовать.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 18 Июнь 2018, 22:17:21
... например так, только следы будут накладываться друг на друга ...
Код: python
import bge
from mathutils import Vector

up = Vector((0,0,1))
ls = 0.06
r = 0.3
up = Vector((0,0,1))
sc = bge.logic.getCurrentScene()
sl = sc.objectsInactive['sled']
car = sc.objects['Car']

def init():
    bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)

def callback(object, point, normal):
    if object.name[0:5]!='wheel':
        return
    db = object.attrDict
    w = object.worldPosition
    vw = car.getAxisVect(up)
    vu = vw.normalized()
    obp,point,normal = object.rayCast(w-2*vu)
    if obp:
        v1 = point
        if not 'v0' in db:
            db['v0'] = v1
            return
        if (w-v1).length<1.05*r:
            v0 = db['v0']
            while (v1-v0).length>=ls:
                dv = (v1-v0)
                ob = sc.addObject(sl)
                ob.worldPosition = v0+vu*0.03
                ob.alignAxisToVect(vw,2,1)
                ob.alignAxisToVect(normal,2,1)
                ob.alignAxisToVect(dv,0,1)
                v0=v0+dv.normalized()*ls
            db['v0'] = v0
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 19 Июнь 2018, 08:11:51
Николай, хотелось бы получить ответ на мой "Ответ #187" - в чём там ошибка?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 19 Июнь 2018, 10:27:29
... например так, только следы будут накладываться друг на друга ...
Код: python
....
    if object.name[0:5]!='wheel':
Николай, что это в квадратных скобках, где можно прочитать?
Цитировать
Код
if (w-v1).length<1.05*r:
Что это за коэффициент "r", в чём его смысл?
Название: Re: Странное поведение в BGE
Отправлено: Striver от 19 Июнь 2018, 13:14:27
Цитировать
if object.name[0:5]!='wheel':
Цитировать
что это в квадратных скобках, где можно прочитать?
от строкового поля object.name взяты первые 5 символов (с 0-го по 4-й).
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 19 Июнь 2018, 17:03:06
Цитировать
if object.name[0:5]!='wheel':
Цитировать
что это в квадратных скобках, где можно прочитать?
от строкового поля object.name взяты первые 5 символов (с 0-го по 4-й).
Спасибо Striver. Взгляни на рисунок. Изменяю размер следа по оси Y, а изменяется по оси Х. Как это получается, есть какие-то соображения на этот счёт?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 19 Июнь 2018, 20:56:24
>> if object.name[0:5]!='wheel':
... это было сделано для более унифицированного определения объектов типа колесо, то есть все эти объекты имеют названия, которые начинаются с wheel ...
... можно придумать и другой способ классификации ...

>> что это в квадратных скобках, где можно прочитать?
... например https://pythonworld.ru/tipy-dannyx-v-python/stroki-funkcii-i-metody-strok.html ...

>> Что это за коэффициент "r", в чём его смысл?
... это радиус колеса, суть - если луч, выпущенный из центра колеса пересекается с землёй в точке удалённой не более 5% чем радиус колеса, то эту точку нужно использовать для рисования следа ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 20 Июнь 2018, 03:21:58
>> Изменяю размер следа по оси Y, а изменяется по оси Х. Как это получается, есть какие-то соображения на этот счёт?
... не удалось добиться такого результата, изменения по осям соответствуют заявленным значениям ...
... опиши последовательность своих действий, приводящих к неверному результату ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 20 Июнь 2018, 09:32:30
>> Изменяю размер следа по оси Y, а изменяется по оси Х. Как это получается, есть какие-то соображения на этот счёт?
... не удалось добиться такого результата, изменения по осям соответствуют заявленным значениям ...
... опиши последовательность своих действий, приводящих к неверному результату ...
Николай, направляю файл. Надеюсь что у тебя раскроются те же самые окна что и я вижу с выделенным объектом sled.
Запусти движок и наблюдай. Жёлтое колесо медленно начнёт движение вверх по экрану открывая грунт. В месте первого следа чётко видно соответствие ширины колеса и следа, т.е. по оси Х.
Останови движок. Активируй второй слой и не меняя масштаба окон просто в окошке "Размер" по оси Y измени размер в любую сторону.
Запусти движок предварительно активировав первый слой.
У меня получается, в результате изменения значения по оси Y изменяется ширина следа, как на моём рисунке. Перед отправлением файла ещё раз убедился, что всё происходит именно так и после перезагрузки компа.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 20 Июнь 2018, 16:55:54
Тут ещё интересный момент есть.
Во внутрь блока: while (v1-v0).length>=ls:
вставил: print("46 ob = ", ob), и обнаружил что сюда Blender не заглядывает - нет распечатки в консоли этой строки. Тогда каким образом появляется след от колеса, если его появление выполняется только внутри этого блока?

А, эта строка: v0=v0+dv.normalized()*ls зачем изменяет v0? и тут же
db['v0'] = v0
В каком случае возможно выполнение условия:
while (v1-v0).length>=ls:?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Июнь 2018, 01:01:48
>>Во внутрь блока: while (v1-v0).length>=ls:
>>вставил: print("46 ob = ", ob), и обнаружил что сюда Blender не заглядывает - нет распечатки в консоли этой строки. Тогда >>каким образом появляется след от колеса, если его появление выполняется только внутри этого блока?
... вложи файл с этой вставкой, это ненормальное поведение и в таком случае след не должен появляться ...

>> А, эта строка: v0=v0+dv.normalized()*ls зачем изменяет v0? и тут же db['v0'] = v0
... это не так, "тут же" не подходит для понимания хода исполнения кода на python, поскольку там разные отступы и следовательно это разные логические блоки, то есть v0=v0+dv.normalized()*ls выполняется в цикле, а db['v0'] = v0 после цикла (исходя из контекста кода) ...

>> "Размер" по оси Y измени размер в любую сторону.
... это косяк программирования (написания кода), то есть выравнивать нужно не по оси X, а по оси Y, то есть в коде заменить
ob.alignAxisToVect(dv,0,1) на ob.alignAxisToVect(dv,1,1) ...


... с учётом выше сказанного предлагаю внести следующие правки в код ...
Код: python
    if obp:
        v1 = point
        if (w-v1).length<1.05*r and 'v0' in db:
            v0 = db['v0']
            while (v1-v0).length>=ls:
                dv = (v1-v0)
                ob = sc.addObject(sl)
                ob.worldPosition = v0+vu*0.03
                ob.alignAxisToVect(normal,2,1)
                ob.alignAxisToVect(dv,1,1)
                v0=v0+dv.normalized()*ls
            db['v0'] = v0
        else:
            db['v0'] = v1


Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 08:45:19
>>Во внутрь блока: while (v1-v0).length>=ls:
>>вставил: print("46 ob = ", ob), и обнаружил что сюда Blender не заглядывает - нет распечатки в консоли этой строки. Тогда >>каким образом появляется след от колеса, если его появление выполняется только внутри этого блока?
... вложи файл с этой вставкой, это ненормальное поведение и в таком случае след не должен появляться ...
Вложен в моём 196 ответе
Цитировать
>> А, эта строка: v0=v0+dv.normalized()*ls зачем изменяет v0? и тут же db['v0'] = v0
... это не так, "тут же" не подходит для понимания хода исполнения кода на python, поскольку там разные отступы и следовательно это разные логические блоки, то есть v0=v0+dv.normalized()*ls выполняется в цикле, а db['v0'] = v0 после цикла (исходя из контекста кода) ...
Уточню свой вопрос: строка: v0=v0+dv.normalized()*ls зачем изменяет v0?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 10:25:40
Николай, я нашёл момент входа в блок while (v1-v0).length>=ls:
Вопрос снимаю.
Однако теперь другой вопрос, собственно к которому и подбирался:
Почему теряется текстура следа?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Июнь 2018, 13:29:07
>>Уточню свой вопрос: строка: v0=v0+dv.normalized()*ls зачем изменяет v0?
... ради этого затевался цикл, чтобы отрисовать все фрагменты  следа длиной ls между v0 и v1 ...

>> Почему теряется текстура следа?
... не знаю ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 15:22:06
>>Уточню свой вопрос: строка: v0=v0+dv.normalized()*ls зачем изменяет v0?
... ради этого затевался цикл, чтобы отрисовать все фрагменты  следа длиной ls между v0 и v1 ...

>> Почему теряется текстура следа?
... не знаю ...
Николай, я запустил движок в каркасном режиме отображения.
Результат: создано 5 объектов sled за 20 обращений в блок while (v1-v0).length>=ls:
Получается что для создания одного объекта используются 4 обращения в блок while. Может здесь собака зарыта, потому и теряется текстура, что накладывается одна на другую со смещением? Честно говоря твой код никак не проглочу - вроде всё понятно, но что-то не укладывается, а что, толком не понимаю.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 17:48:49
Извиняюсь Николай, 4 обращения, это 4 колеса. Так что смазанная текстура по какой-то другой причине.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Июнь 2018, 20:06:13
... у тебя ls чему равно? ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 21:02:00
... у тебя ls чему равно? ...
6 см. - 3 фрагмента, ширина 15 см.
Можно текстуры следа изменять по длине кратно 2 см. от 1 фрагмента до 6-ти, т.е. длина (ls) от 2 см. до 12 см. (есть текстуры).
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Июнь 2018, 21:42:32
... то есть ls = 0.06? попробуй увеличить ls так чтобы между фрагментами был виден зазор например ls = 0.16 ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 21 Июнь 2018, 21:59:50
... то есть ls = 0.06? попробуй увеличить ls так чтобы между фрагментами был виден зазор например ls = 0.16 ...
Не понял идею. Изменить длину следа?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 21 Июнь 2018, 22:06:55
>> Не понял идею. Изменить длину следа?
... судя по картинке у тебя длина фрагмента не 6 см? установи ls=0.15 и посмотри будет ли наложение ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Июнь 2018, 07:59:15
>> Не понял идею. Изменить длину следа?
... судя по картинке у тебя длина фрагмента не 6 см? установи ls=0.15 и посмотри будет ли наложение ...
И, опять я не понял идею. Надо изменить в коде оставив прежние размеры объекта, надо изменить размеры объекта, оставив неизменными в коде, надо изменить в коде и размер объекта? Последняя моя картинка: в коде - ls=0.16, объект Х=15, Y=15, 6 сегментов (6 выступов на краях шины). До этого текстура была с 3-мя выступами и длиной 6 см.
Сделал ещё две пробы. Сориентируй в какую сторону грести предлагаешь. Я не спец, но вдруг что-то выйдет, не даром же говорят что чудакам везёт.

Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Июнь 2018, 13:27:26
>> Может здесь собака зарыта, потому и теряется текстура, что накладывается одна на другую со смещением?
>> И, опять я не понял идею.
... это же твой вопрос был, не так ли ...
... ответ на него положительный - у тебя объект 15 см, а рисуешь ты его через 6 см, отсюда наложение ...
... или мне не нужно прорабатывать эту тему? ...
... в моём понимании длина объекта (Y) и значение ls в коде должны быть одинаковыми ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Июнь 2018, 16:14:42
>> Может здесь собака зарыта, потому и теряется текстура, что накладывается одна на другую со смещением?
>> И, опять я не понял идею.
... это же твой вопрос был, не так ли ...
... ответ на него положительный - у тебя объект 15 см, а рисуешь ты его через 6 см, отсюда наложение ...
... или мне не нужно прорабатывать эту тему? ...
... в моём понимании длина объекта (Y) и значение ls в коде должны быть одинаковыми ...
Николай, в моём "Ответ #209" на правом рисунке у меня объект sled, 15 см. шириной (ось Х), и, 6 см. длиной (ось Y). В коде ls=0.062. Разве это не то что ты пишешь?
Ниже жёлтого колеса 4 объекта sled с размытой текстурой. Я действительно предполагал накладывание объектов sled один на другой, но ты подсказал изменить расстояние и это показало что не наложение объектов виновато в размытости.
Может что-то не так в настройках объектов или вообще Blender'а, а?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Июнь 2018, 20:08:02
... выложи ещё раз модель со всеми текстурами ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Июнь 2018, 20:20:28
Николай, ещё один "заскок" в программе - только что обнаружил.
В нормальной ситуации, после запуска движка тележка по уклону движется и от колёс образуются следы - всё как задумано.
Однако после нажатия клавиши "Стрелка вниз" - включение заднего хода, тележка едет назад не оставляя следов.
На рисунке: тележка движется вперёд под уклон оставляя следы. Дойдя до взгорка, по инерции немного заезжает на него, потом катится назад уже не оставляя следов. Клавиши "Стрелка вниз" и "Стрелка вверх" не нажимались в этом случае.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Июнь 2018, 20:24:03
... выложи ещё раз модель со всеми текстурами ...
Без проблем.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Июнь 2018, 20:46:38
>> тележка едет назад не оставляя следов
... буду искать причину ...
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 22 Июнь 2018, 20:50:14
... желательно настроить в качестве текстурных координат UV развёртку, тогда такой проблемы со смазыванием текстуры не будет ...
https://docs.blender.org/manual/ru/dev/editors/uv_image/uv/editing/applying_image.html#use-uv-coordinates
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 22 Июнь 2018, 21:27:31
... желательно настроить в качестве текстурных координат UV развёртку, тогда такой проблемы со смазыванием текстуры не будет ...
https://docs.blender.org/manual/ru/dev/editors/uv_image/uv/editing/applying_image.html#use-uv-coordinates
Ну, так это другое дело. Текстуры уже так назначал, но не думал что это так существенно. Спасибо за подсказку.
Теперь с обратным ходом разобраться и можно приступать к следам на сетке.
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 23 Июнь 2018, 12:20:58
Novichok, мне непонятен смысл этих твоих изысканий про следы...
Это так важно? Если ДА, то почему и зачем?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 23 Июнь 2018, 21:37:58
Novichok, мне непонятен смысл этих твоих изысканий про следы...
Это так важно? Если ДА, то почему и зачем?
У меня есть работа которой очень дорожу, но видно что-то остаётся ею невостребованным. Я не один такой. Очень много людей отдают себя полностью работе, но в то же время с такой же самоотверженностью отдаются какому-то другому занятию, например шахматам или маркам, авто или судомоделированию и т.д.
По работе, в качестве смежников имею программистов. Что-то общепонятное они доводят до моего сведения, но только в рамках разрабатываемой темы.
В Blender я нахожусь в "свободном полёте" - никто меня ничем не напрягает и не озадачивает, а такие как Николай и др., просто удовлетворяют моё любопытство в силу наличия своих знаний, и я им очень за это благодарен.
Для меня привычно, что я на работе могу зайти в любой отдел, или из любого отдела могут ко мне придти, с любым вопросом касающимся необходимости обмена знаниями. Обмениваемся, вот и здесь я рассчитываю на подобную возможность. Ведь чужие секреты, планы мне не нужны, а общие наработки, указания на мои ошибки, которые очевидны для более знающих, мне необходимы. Может быть когда-то пригодятся, но скорее всего как марки, останутся лишь уделом моего интереса.
Следы, это тема родилась спонтанно. Изучал жидкость и был впечатлён наглядностью падения предметов в жидкость, но сразу же захотелось прокатить колесо по воде, а лучше по грязи, чтоб ошмётки летели дугой.
Но просто катящееся колесо мне не интересно, мне интересно им управлять, и чтобы оно могло преодолевать разные фракции от твёрдых, по которым оставляет текстурированные следы, до грязи в которой оставляет разной глубины след в зависимости от её жидкости.
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 23 Июнь 2018, 22:09:02
А почему был выбран именно Блендер? Более эффективней было бы выбрать ЯП Freebasic и какой-нибудь движок к нему на базе Irrlicht (Ninfa, Clady3D), раз соображаешь в Бейсике.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 24 Июнь 2018, 07:01:16
А почему был выбран именно Блендер?
Просто по совету, видно советующий был его фанатом на тот момент.
Цитировать
Более эффективней было бы выбрать ЯП Freebasic и какой-нибудь движок к нему на базе Irrlicht (Ninfa, Clady3D), раз соображаешь в Бейсике.
Мне попадались ролики с подобным содержанием, КаМАЗ прокладывающий колею с пробуксовкой, но это ролик. Разыскивать автора для того чтобы поинтересоваться как и на чём он делал ролик, посчитал глупым занятием.
Может быть и выбрал бы что-то подобное, коль имел бы информацию.
Я бы не назвал это "соображаешь", так, просто имею понятие в азах.
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 24 Июнь 2018, 10:57:27
Ясно. Я думал, что тебя интересует именно физика реалтайм, которая не даст качественной реалистичной симуляции подобных явлений, т.к. более упрощённая... Но если рассчитывать симуляцию физики в Блендере для видео, то это можно сделать гораздо качественней и без программирования... Поэтому интересуюсь, какова конечная цель? Эффектное физически правильное видео, или приблизительный реалтайм? Два в одном вряд ли получится, для этого надо очень шустрое и дорогое "железо"...
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 25 Июнь 2018, 03:13:55
Кстати, BGE умер в апреле 2018 совсем... Его развитие больше никак не поддерживает команда разработчиков Блендера.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 26 Июнь 2018, 12:59:15
Ясно. Я думал, что тебя интересует именно физика реалтайм, которая не даст качественной реалистичной симуляции подобных явлений, т.к. более упрощённая... Но если рассчитывать симуляцию физики в Блендере для видео, то это можно сделать гораздо качественней и без программирования... Поэтому интересуюсь, какова конечная цель? Эффектное физически правильное видео, или приблизительный реалтайм? Два в одном вряд ли получится, для этого надо очень шустрое и дорогое "железо"...
Я не знаю, какие идеи мной овладеют в дальнейшем, а сейчас мне интересна возможность макетирования с возможностью управления макетом. Вот то же самое колесо, которое здесь мучаю в BGE, могу сделать управляемым, т.е. послать колесо в любом направлении, толи в грязь или воду, толи в песок или снег и т.д. Модель с текстурированным следом, в общем-то, понятно как делать, правда, ещё не полностью, ну это Николай вроде обещал, посмотреть, в чём ошибка.
Samovar, мне, когда впервые про Blender рассказали, то мне понравилось то, что в нём практически всё можно делать без кодирования - именно это меня прельстило. Сейчас, пусть и не большой опыт работы имею, но не могу себе представить след на сетке в Blender без кода. След на мокром песке с заглублением 1 - 5 см., это одно, а по рыхлому снегу заглублением 10 - 50 см. ведь это совсем иное дело. След чисто по протектору это одно, а след с осыпанием вовнутрь или выбросом наружу...
Вот это то, что хотелось бы освоить. Я понимаю что запрос "ангельский", но что-то из перечисленного ведь можно сделать. Вот и хочу посмотреть, что возможно сделать.
Повторюсь, мне интересна возможность макетирования с возможностью управления макетом. Вполне может статься, что эта наука мне сможет пригодиться когда-нибудь, а может так и остаться просто удовлетворением любопытства.

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 26 Июнь 2018, 13:00:10
Кстати, BGE умер в апреле 2018 совсем... Его развитие больше никак не поддерживает команда разработчиков Блендера.
Что так?
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 26 Июнь 2018, 13:03:32
Ну, вот так... :)
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 26 Июнь 2018, 13:21:03
Цитировать
Вполне может статься, что эта наука мне сможет пригодиться когда-нибудь, а может так и остаться просто удовлетворением любопытства.
Забей уже конкретно на BGE, так как он мёртв... Но в плане общего развития, я только приветствую твой энтузиазм...
Ты пробовал сделать свою мафынку и следы "с грязью" тоже физикой, и тоже в Блендере, но вне BGE?
Название: Re: Странное поведение в BGE
Отправлено: Samovar от 26 Июнь 2018, 14:10:55
Ещё раз мой вопрос. Какова твоя цель?

Название: Re: Странное поведение в BGE
Отправлено: Novichok от 26 Июнь 2018, 16:43:51
Цитировать
Вполне может статься, что эта наука мне сможет пригодиться когда-нибудь, а может так и остаться просто удовлетворением любопытства.
Забей уже конкретно на BGE, так как он мёртв... Но в плане общего развития, я только приветствую твой энтузиазм...
Ты пробовал сделать свою мафынку и следы "с грязью" тоже физикой, и тоже в Блендере, но вне BGE?
Нет, я видел ролик с год, наверно, назад и почему-то в голове сидит что его делали на 3D Max'е. Поищу, может ссылка на ролик где-то есть, но не обещаю. 3D Max'ом не интересовался. Почему? Толком сам не знаю. Может из-за его коммерционности... Но честно сказать, просто не задумывался над этим. Заинтересовался Blender'ом, вот и лазию по его возможностям. Пока этого хватает.
Машинка, точнее управление к ней, мне попалось на глаза раньше и я просто освоил её (я так думаю что освоил). Тележку из этой наработки я и показал. Сама по себе, управляемая машинка, мне не интересна, хоть сетку я и сделал по обучающим роликам, и она действительно соблюдая инерцию движется, тормозит, с креном поворачивает.
Далее интересно начать её "курочить", сталкивая с чем-то, но этим не заморачивался пока. Мне сейчас интереснее колесо катать по разным грунтам, освоить изменения сеток.
Используя, как пассивное, под уклон скатывание, так и активное, побуждаемое чем-то, движение колеса, типа в комплекте с машинкой, но машинка здесь второстепенна, главное здесь колесо и её следы.
Цель пока одна - разобраться со всем многообразием возможных следов, и только. Вполне возможно, что после того как освою следы вообще забуду о них, но может статься что родятся какие-то идеи на основе следов.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 26 Июнь 2018, 19:50:06
>> тележка едет назад не оставляя следов
... буду искать причину ...
Николай, извиняюсь, проблема оказалась труднее чем предполагалось или просто занятость большая? Я никуда не спешу, но хотелось бы быть уверенным, что вопрос не забыт.
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 27 Июнь 2018, 03:40:53
... сними у следа чек с Backface Cull https://docs.blender.org/manual/ru/dev/game_engine/materials.html?highlight=backface#game-settings ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 27 Июнь 2018, 07:18:23
... сними у следа чек с Backface Cull https://docs.blender.org/manual/ru/dev/game_engine/materials.html?highlight=backface#game-settings ...
Помогло, спасибо Николай.
Сейчас займусь изучением теории рельефного следа, надеюсь что в случае появления вопросов и разного рода непоняток столь же благожелательно выручишь. Удачи во всём.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 05 Июль 2018, 11:25:45
Всем привет. Думал, что с колесом и следам все непонятки снял, однако ещё одну нарыл. Катится колесо по поверхности, оставляет след - всё нормально. Однако это "нормально" для твёрдой поверхности. А если поверхность рыхлая - снег, грязь, сухой песок, колесо должно утопать, толи на несколько сантиметров, толи по ось. Мне не удалось опустить опорную поверхность колеса ниже поверхности, по которой катится колесо, т.е. получить эффект утопания колеса. Вопрос: возможно, добиться эффекта утопания колеса, если возможно, то как?
Название: Re: Странное поведение в BGE
Отправлено: Николай Николаев от 05 Июль 2018, 21:02:48
... возможный вариант - сделать коллизийное колесо невидимым, и сделать второе колесо, связанное с первым родительским отношением ...
... для второго колеса отменить коллизию и сделать его диаметр больше коллизийного ...
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 05 Июль 2018, 21:15:25
... возможный вариант - сделать коллизийное колесо невидимым, и сделать второе колесо, связанное с первым родительским отношением ...
... для второго колеса отменить коллизию и сделать его диаметр больше коллизийного ...
Городулька будет, а блендер в чистом виде, каким-то образом центр колеса опустить не может?
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Июль 2018, 13:06:31
... возможный вариант - сделать коллизийное колесо невидимым, и сделать второе колесо, связанное с первым родительским отношением ...
... для второго колеса отменить коллизию и сделать его диаметр больше коллизийного ...
Николай, городульку попробовал сгородить с иной идеей. В твоей не нравится то, что если колесо с твоим принципом использовать, то это колесо будет равноуглублённо следовать по всей поверхности, а ведь интересно сделать поверхность с разной плотностью в разных местах.
Добавил копию поверхности и сделал её "Без столкновений". В подлиннике сделал разные углубления. Теперь колесо следующее по подлиннику поверхности, видимо как следующее по копии утопая в ней. Однако проблема не решена - неясно как теперь сделать распознавание сетки копии, ведь именно её необходимо будет изменять для создания следа изменяющего сетку.
На всякий случай пристёгиваю файл, но код пока старый, негодный для этой идеи.
Ерунда какая-то, не даёт возможности пристегнуть файл. Попозже попробую.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Июль 2018, 18:05:17
Цитата: Novichok link=topic=2090.msg30992#msg30992
[quote
Ерунда какая-то, не даёт возможности пристегнуть файл. Попозже попробую.
Странно, сделал несколько попыток отправить файл, но безуспешно, сайт не выдаёт окно поиска пристёгиваемого файла. Сбой на сайте, или я что-то нашкодил?
Название: Re: Странное поведение в BGE
Отправлено: Striver от 06 Июль 2018, 18:45:09
Цитировать
Странно, сделал несколько попыток отправить файл, но безуспешно, сайт не выдаёт окно поиска пристёгиваемого файла. Сбой на сайте, или я что-то нашкодил?
http://blender-3d.ru/forum/index.php/topic,418.msg30991.html#msg30991
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 06 Июль 2018, 20:01:38
Цитировать
Странно, сделал несколько попыток отправить файл, но безуспешно, сайт не выдаёт окно поиска пристёгиваемого файла. Сбой на сайте, или я что-то нашкодил?
http://blender-3d.ru/forum/index.php/topic,418.msg30991.html#msg30991
Спасибо за информацию, Striver. Подожду когда нормализуется всё. В конце концов есть файлообменники.
Название: Re: Странное поведение в BGE
Отправлено: Novichok от 07 Июль 2018, 09:54:35
На всякий случай вот ссылка на файл SledRiflyonogoKolesa.blend https://cloud.mail.ru/public/ET8m/kwrFUhRjw
Николай, мне думается что создание рифлёного следа начинать надо именно с создания файла, а потом под него уж собирать код.
И так, как можно распознать столкновение с поверхностью Без столкновений, есть какие-то хитрости или это тупик?