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

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

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

... код, модель во вложении ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #46 : 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 в чём?


Оффлайн Novichok

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

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #48 : 02 Апрель 2018, 11:23:56 »
Цитировать
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #49 : 02 Апрель 2018, 11:43:30 »
Цитировать
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Теперь-то ссылку сохранил. Просто хотелось хоть чем-то помочь Николаю.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #50 : 02 Апрель 2018, 12:21:37 »
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Striver, отсюда делаю вывод:
Есть знание английского, есть опыт литературного перевода, есть знание Blender и Python старых версий и надеюсь современных.
Если это не будет наглостью с моей стороны, то продублирую свою просьбу-вопрос: в современном BGE возможно создание подобного следа?

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #51 : 02 Апрель 2018, 12:43:27 »
def callback(object, point, normal):
 
Николай, в строке в скобках получаемые параметры или передаваемые в функцию? Я так понял что это получаемые в результате работы функции.

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #52 : 02 Апрель 2018, 13:26:47 »
Цитировать
Есть знание английского
Вот тут не угадал. Много лет себя пинками под зад заставляю переводить всякую хрень, в надежде, что в голове что-то останется, но эффект минимален.
Цитировать
продублирую свою просьбу-вопрос: в современном BGE возможно создание подобного следа?
К сожалению в BGE я не ориентируюсь, от слова "совсем".
В упомянутой мной книге применяются библиотеки редактора Блендера (Blender, Blender.Mesh, Blender.Object и т.д.), в современных версиях им соответствуют библиотеки bpy.
А для игрового движка используется bge (и тогда использовалась). В ней тут только Николай Николаев разбирается. Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #53 : 02 Апрель 2018, 15:29:37 »
Цитировать
Есть знание английского
Вот тут не угадал. Много лет себя пинками под зад заставляю переводить всякую хрень, в надежде, что в голове что-то останется, но эффект минимален.
Что-то, да остаётся, просто человек так устроен, что не доволен достигнутым.
Цитировать
Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е. Может я что и путаю, давно это было.
Я, вообще-то, считал Blender более продвинутым чем Max. Не исключаю, что наверно, из-за своих хотелок.

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: Странное поведение в BGE
« Ответ #54 : 02 Апрель 2018, 15:43:43 »
Цитировать
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е.
Т.е. это заранее отрендеренный ролик. Ну так книжка, которую я упомянул, в основном про это, про моделирование и создание анимации. Это и для современных версий Блендера можно переписать.
А игровой движок - совсем другое.
Цитировать
Я, вообще-то, считал Blender более продвинутым чем Max.
У Блендера игровой движок хотя бы есть, но естественно, со своими ограничениями. А про наличие игрового движка в 3D Max'е я не слышал. "Продвинутость" - понятие относительное и субъективное...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #55 : 02 Апрель 2018, 17:37:00 »
Цитировать
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е.
Т.е. это заранее отрендеренный ролик. Ну так книжка, которую я упомянул, в основном про это, про моделирование и создание анимации. Это и для современных версий Блендера можно переписать.
Нет. Очень похоже на запись с экрана, потому как голос за экраном комментировал свои оплошности, и происходило маневрирование авто согласно комментариев.
Для моих целей, впрочем достаточно получить текстурный след. Азарт послужил причиной запроса на возможность создания следа через деформацию сетки.

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

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

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #57 : 05 Апрель 2018, 09:20:13 »
Николай, я всё же надеюсь получить ответ на мои сообщения « Ответ #46 : 02 Апреля 2018, 10:33:16 » и «Ответ #51 : 02 Апреля 2018, 12:43:27» как маленько освободишься.

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

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #58 : 05 Апрель 2018, 13:29:38 »
#46
... есть игровая логика, когда ты нажимаешь P то запускается игровой движок с этой логикой, в этой логике указано что у тебя установлены коллизии на объекты и если они срабатывают то выполнение программы прерывается и выполняется callback вызов указанной функции ...
... то есть при загрузке модуля функции определяемые заголовком def не выполняются, они выполняются когда происходит какое-либо событие или выполняется условие в игровой логике ...

#51
... этой строке идёт определение функции (def, define), то есть сама функция не выполняется, но определяется её вызов и содержание ...
... далее  по тексту можно вызвать код этой функции многократно ...

Оффлайн Novichok

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


 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 361
Автор: LEXA ANЭGROWND
blender.png
Скачано: 365
Автор: ipv2007
4.png
Скачано: 373
Автор: hiroyukiss
2.png
Скачано: 394
Автор: hiroyukiss

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