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

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #180 : 08 Май 2018, 14:07:26 »
Цитировать
Инструкция  return здесь для чего? Что будет без неё?
Просто return без возвращаемого значения просто возвращает управление из функции туда, откуда она вызвана.
Имеет смысл, если в функции после этой строки есть ещё что-то, но нужно это проигнорировать.
Если пустой return находится в конце функции, он, фактически не нужен, без него будет работать точно также (хотя я обычно предпочитаю его ставить)

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #181 : 08 Май 2018, 17:16:18 »
Цитировать
Инструкция  return здесь для чего? Что будет без неё?
Просто return без возвращаемого значения просто возвращает управление из функции туда, откуда она вызвана.
Имеет смысл, если в функции после этой строки есть ещё что-то, но нужно это проигнорировать.
Если пустой return находится в конце функции, он, фактически не нужен, без него будет работать точно также (хотя я обычно предпочитаю его ставить)
Спасибо Striver за пояснение, просто я не понял его смысла в данном коде, потому и решил уточнить.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #182 : 15 Июнь 2018, 12:47:53 »
... ещё один вариант во вложении для обсуждения ...
Всем привет. Николай, коль эту тему ещё с контроля не снял и есть время и желание, то хочу продолжить обсуждение появившихся у меня проблем с текстурным следом.
Ранее знакомился с возможностью моделирования авто. Так попробовал внедрить возможность следа от четырёх колёс на основе полученных от тебя знаний. Попробовал, и сразу же получил по зубам. Подозреваю, что причина в том, что столкновение колёс с грунтом по каким-то причинам не распознаётся, соответственно проверить работу кода прямо с первых строк проверить не могу. Буду очень признателен, коль поможешь в устранении моей ошибки.

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

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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #184 : 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
Вот жеж блин, все настройки проверил, а в физику не посмотрел. Спасибо за подсказку. Николай, ты наверно видел что следы становятся на ребро? Сейчас мне чуть недосуг, на буднях попытаюсь разобраться откуда ноги растут у этой проблемы. Если не разберусь (что более всего вероятно) опять к тебе за помощью обращусь. Не возражаешь?

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #185 : 16 Июнь 2018, 16:47:29 »
>> Не возражаешь?
... на сколько в курсе, на этом форуме нет каких-либо ограничений на количество задаваемых вопросов ...

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #186 : 18 Июнь 2018, 02:29:17 »
... кстати, если у тебя теперь 4 колеса, то можно изменить логику происходящего - не нужно вычислять по отдельности направления луча для определения нахождения следа, поскольку эти лучи перпендикулярны плоскости платформы автомобиля и только выходят из центров колес ...
... и условие рисования следа можно упростить, проверив лишь расстояние от центра колеса до точки пересечения луча с землёй, например чтобы оно было не больше 1,05 радиуса колеса ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #187 : 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 здесь ведь колесо.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #188 : 18 Июнь 2018, 10:13:40 »
... кстати, если у тебя теперь 4 колеса, то можно изменить логику происходящего - не нужно вычислять по отдельности направления луча для определения нахождения следа, поскольку эти лучи перпендикулярны плоскости платформы автомобиля и только выходят из центров колес ...
... и условие рисования следа можно упростить, проверив лишь расстояние от центра колеса до точки пересечения луча с землёй, например чтобы оно было не больше 1,05 радиуса колеса ...
А нормали для следа? К тому же всхолмленность поверхности, наличие/отсутствие поверхности под одним или несколькими колёсами?
Однако код интересно посмотреть и попробовать.

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

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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #190 : 19 Июнь 2018, 08:11:51 »
Николай, хотелось бы получить ответ на мой "Ответ #187" - в чём там ошибка?

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #191 : 19 Июнь 2018, 10:27:29 »
... например так, только следы будут накладываться друг на друга ...
Код: python
....
    if object.name[0:5]!='wheel':
Николай, что это в квадратных скобках, где можно прочитать?
Цитировать
Код
if (w-v1).length<1.05*r:
Что это за коэффициент "r", в чём его смысл?

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #192 : 19 Июнь 2018, 13:14:27 »
Цитировать
if object.name[0:5]!='wheel':
Цитировать
что это в квадратных скобках, где можно прочитать?
от строкового поля object.name взяты первые 5 символов (с 0-го по 4-й).

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #193 : 19 Июнь 2018, 17:03:06 »
Цитировать
if object.name[0:5]!='wheel':
Цитировать
что это в квадратных скобках, где можно прочитать?
от строкового поля object.name взяты первые 5 символов (с 0-го по 4-й).
Спасибо Striver. Взгляни на рисунок. Изменяю размер следа по оси Y, а изменяется по оси Х. Как это получается, есть какие-то соображения на этот счёт?

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #194 : 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% чем радиус колеса, то эту точку нужно использовать для рисования следа ...

 


Яметрика

* По форуму

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

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

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

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