[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


Страница 1 из 11
Модератор форума: Spidy, turBO, blitz3d 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Физическая модель пули, рикошет. Посоветуйте.
Физическая модель пули, рикошет. Посоветуйте.
jekardo666Дата: Вторник, 24.04.2012, 21:10 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
Здравия всем. Назрел вопрос: после 19 прохождений демо-версии Sniper Elite v2 задумался, можно ли сделать примерно такое же поведение пули. Т.е летела по параболе, сопротивление воздуха,ветер, при попадании в железную или каменную поверхность пуля рикошетит также по физике.

Примерно представляю как сделать, чтоб пуля летела по параболе, но реализовать не могу, ибо навыка мало: из начальной точки вылетает наша пуля, нач. скорость = n, высота относительно базового террэйна = h, при прохождении заданного расстояния высота h уменьш. на 0.3 (примерно),скорость уменьш. на 0.2 (примерно).
Рикошет: при достижении поверхности t пуля отлетает на рандомный угол a, меняя при этом свою скорость и высоту h.
Кто сможет, реализуйте код, пожалуйста. Можно на любой физической библиотеке по Xors 3D.
 
ParisHiltonДата: Среда, 25.04.2012, 16:03 | Сообщение # 2
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
Я бы попробовал сделать объект типа куба и двигать его командой MoveEntity, причем понемногу его корректировать изменением параметров функции. Скорость задать небольшую, чтобы наблюдать за объектом.

Чтобы узнать угол пули(куба) при столкновении и правильно ее отрикошетить надо юзать векторы. Можно использовать physiX. Кстати, поведение пули тоже будет проще реализовать с помощью PhysiX.


Мы ищем предмет цели для того чтобы найти результаты его следствия
 
jekardo666Дата: Среда, 25.04.2012, 17:04 | Сообщение # 3
ламер
Группа: Пользователи
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
ParisHilton, тоже по поводу PhysX думал. Вот только не пойму, почему не двигается сфера (пуля).
Гляньте, пожалуйста:

Quote
Include "C:\Program Files\Blitz3D\userlibs\Xors3d.bb"
Include "Functions_3rd.bb"

xGraphics3D 640,480,32,False,True
xSetBuffer xBackBuffer()

Global camera = xCreateCamera()
Global light = xCreateLight()
Global bullet = xCreateSphere()

Const bul_speed = 2
Const g = 1

xMoveEntity bullet,0,1,2
xPositionEntity camera,0,0,-15

xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
While Not xKeyDown(1)
If xKeyDown(17) Then xMoveEntity camera,0,0,.2
If xKeyDown(31) Then xMoveEntity camera,0,0,-.2
If xKeyDown(32) Then xMoveEntity camera,.2,0,0
If xKeyDown(30) Then xMoveEntity camera,-.2,0,0

xUpdateWorld
xRenderWorld

xFlip
Wend

End
 
ParisHiltonДата: Четверг, 26.04.2012, 13:17 | Сообщение # 4
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
У меня сфера двигается как и положено.

Проверьте запустить стандартные примеры с физиксом. Похоже, что у Вас коряво прошла установка.


Мы ищем предмет цели для того чтобы найти результаты его следствия
 
jekardo666Дата: Четверг, 26.04.2012, 13:30 | Сообщение # 5
ламер
Группа: Пользователи
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
Вчера чуть подправил код.
Вот он:

Code
Include "C:\Program Files\Blitz3D\userlibs\Xors3d.bb"
Include "Functions_3rd.bb"

Type Bullets
Field ent
Field life
End Type

xGraphics3D 640,480,0
xSetBuffer xBackBuffer()

Global camera = xCreateCamera()
Global light =xCreateLight()
Global bullet = xCreateSphere()
cube = xCreateCube()

xPositionEntity bullet,0,0,0
xMoveEntity bullet,0,-1,2
xPositionEntity camera,0,0,0
xMoveEntity cube,0,0,1

xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
While Not xKeyDown(1)

If xMouseDown(1) Then CreateBullet(xEntityX(camera), xEntityY(camera), xEntityZ(camera));xMoveEntity cube,0,-.1,3
   UpdateBullets()

If xKeyDown(17) Then xMoveEntity camera,0,0,.2
If xKeyDown(31) Then xMoveEntity camera,0,0,-.2
If xKeyDown(32) Then xMoveEntity camera,.2,0,0
If xKeyDown(30) Then xMoveEntity camera,-.2,0,0

  xUpdateWorld
  xRenderWorld
   
  xFlip
Wend

End

Function CreateBullet(x#,y#,z#)
b.Bullets = New Bullets
b\ent = xCopyEntity (cube)
xPositionEntity b\ent,x#,y#,z#
xRotateEntity b\ent,xEntityPitch(camera),xEntityYaw(camera),0
End Function

Function UpdateBullets()
For b.Bullets = Each Bullets
      xMoveEntity b\ent,0,0,.3
Next
End Function  


Но при нажатии на кнопку мыши выскакивает Memory access violation. Нет ли у Вас такого?
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Физическая модель пули, рикошет. Посоветуйте.
Страница 1 из 11
Поиск: