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

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #150 : 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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #151 : 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
Цитировать
>> Ну что мешает его вписать в код в качестве комментариев? Банальная лень?
>> код красив, следовательно, и красив алгоритм.
... это нарушает красоту кода, да-да, мне не нравятся комментарии, поскольку код становится не читаемым, чем меньше текста, тем легче код для понимания ...
Опять меня на лирику потянуло. Я тебе сейчас много ужасов напишу.
Николай, ты у меня несколько раз интересовался моей сферой занятости, моими знаниями, позволь узнать то же самое о тебе.
В частности, ты кодируешь, получая задание от потребителя, или по вдохновению создаёшь код, а уж потом ищешь потребителя на него?
Если получаешь задание и затем его выполняешь, то очевидно приходится работать с техническим заданием? Или как оно там у вас именуется?
Сдавая работу, ты пишешь пояснительную записку? Указываешь выходные параметры разработанного тобою блока? Потребитель имеет право производить какие-либо изменения в твоей разработке применительно к своим потребностям?
Если твои ответы на мои вопросы положительны, то, как ты умудряешься обходиться без комментариев, устно потребителю поясняешь?
Красота, миниатюрность, конечно эффектны, но они осложняют понимание твоей идеи и в целом твоего кода. Осложняют, а не облегчают.
Скажу честно, наши потребители выпускаемого нами продукта без пояснительной записки его просто не примут, хоть процесс порою элементарен, типа вставить болванку в патрон; выставить болванку с допуском по биению до такого-то размера; закрепить болванку; отторцевать… , и т.д.
Всё это связано с человеческим фактором, с опасностью для жизни человека. Программа не убьёт человека, скажешь? А если твой блок применят там, где сбой в нём сможет убить или причинить огромный экономический ущерб?


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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #152 : 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


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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #153 : 01 Май 2018, 20:10:24 »
>> А если твой блок применят там, где сбой в нём сможет убить или причинить огромный экономический ущерб?
... насколько в курсе, то у нас здесь форум, а не служба технической поддержки, то есть живое человеческое общение ...
... по большому счёту и если мне не изменяет память здесь нет профессиональных программистов, которые зарабатывают себе кодом на хлеб, поэтому приветствуется конструктивный диалог по типу "делают вот так, не получается вот это, в чём может быть проблема" ...
Я же написал: потянуло на лирику.
А по поводу комментариев, ты не прав - точность комментария только подчёркивает красоту кода. Думаю что я не одинок в этом мнении.
Необходимо время "переварить" полученную информацию, хоть и не в полном,  как запросил, объёме.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #154 : 02 Май 2018, 09:02:00 »
... насколько в курсе, то у нас здесь форум, а не служба технической поддержки, то есть живое человеческое общение ...
... по большому счёту и если мне не изменяет память здесь нет профессиональных программистов, которые зарабатывают себе кодом на хлеб, поэтому приветствуется конструктивный диалог по типу "делают вот так, не получается вот это, в чём может быть проблема" ...
Николай, пока я "перевариваю" к слову пришёлся этот фрагмент нашей переписки. Вполне допускаю что на данном форуме нет профессиональных программистов, педагогов, а есть интересующиеся Blender'ом участники форума. Однако совсем неплохо бы ещё учитывать раздел форума, а он называется "Вопросы от новичков". Кому-то из новичков достаточно просто подсказать или дать готовый код, и он будет счастлив этим (я себя отношу к таким), а кому-то этого мало, им необходимо "докопаться до корней", вот комментарии таким необходимы как воздух (я иногда бываю таким).
Ладно, это опять лирика - пошёл "переваривать".

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #155 : 02 Май 2018, 12:29:22 »
... так ты лирик или технолог? в целом это хорошая идея сделать форум человечнее и дружелюбнее, возьмись за разработку, организацию этого процесса, разработай технологию гуманного вспоможения новичкам, обучи волонтёров форума этой позитивной практике ...
... можно на тебя рассчитывать в этом деле? ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #156 : 02 Май 2018, 18:51:55 »
... так ты лирик или технолог? в целом это хорошая идея сделать форум человечнее и дружелюбнее, возьмись за разработку, организацию этого процесса, разработай технологию гуманного вспоможения новичкам, обучи волонтёров форума этой позитивной практике ...
... можно на тебя рассчитывать в этом деле? ...
Я технолог по холодной обработке металла а не педагог - специфика несколько иная. А вот идею сделать форум человечнее и дружелюбнее поддерживаю целиком и полностью, ведь на сколько я понимаю, в оказании помощи конкурировать ни к чему.
Николай, твоя подсказка, сделать куб в качестве следа (точки), похоже будет работать вкупе с твоим последним кодом - выйду на работу попробую на практике. Ещё раз спасибо за помощь.
По коду. Взгляни на картинку во вложении. Как только поверхность заканчивается, след подскакивает вверх, как думаешь, почему? Вроде за пределами поверхности образование следов не должно быть, а здесь, мне думается, ещё 3 следа образуются уже за пределами поверхности.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #157 : 02 Май 2018, 19:02:16 »
... а как в целом поступать в тех случаях когда колесо отрывается от земли? например трамплин, есть рассуждения по этому поводу или алгоритм? ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #158 : 02 Май 2018, 19:54:41 »
... а как в целом поступать в тех случаях когда колесо отрывается от земли? например трамплин, есть рассуждения по этому поводу или алгоритм? ...
Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #159 : 02 Май 2018, 20:29:01 »
>> Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.
... как узнать место отрыва? ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #160 : 02 Май 2018, 20:51:02 »
>> Так последний след в месте отрыва, затем нет никаких следов в полёте, и вновь в первом месте касания. А, как ещё? По-моему, только так.
... как узнать место отрыва? ...
Очевидно в 13 строке должны прекратиться вызовы callback.

Извиняюсь, я уже на вставлял строк. В строке:
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback)
« Последнее редактирование: 02 Май 2018, 21:21:12 от Novichok »

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #161 : 03 Май 2018, 01:59:13 »
... допустим вызов прекратиться, навсегда? и как его прекращение влияет на определение места отрыва? ...
... как узнать математически находилось ли колесо в воздухе между двумя точками, которые получены в результате обработки коллизий? ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #162 : 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?
« Последнее редактирование: 03 Май 2018, 07:27:54 от Novichok »

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #163 : 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  ...

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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #164 : 03 Май 2018, 18:47:13 »
... все ответы на вопросы уже были приведены в топике, но это не снимает с меня ответственности за не внятность объяснения, а лишь подчёркивает определённую сложность обсуждаемой темы ...
Бывает что тупость одолевает, грешен.
И всё же, какие-то соображения есть по поводу появления следов за пределами поверхности?

 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 1564
Автор: LEXA ANЭGROWND
blender.png
Скачано: 1576
Автор: ipv2007
4.png
Скачано: 1619
Автор: hiroyukiss
2.png
Скачано: 1603
Автор: hiroyukiss

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