Физическая модель пули, рикошет. Посоветуйте.
| |
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. Нет ли у Вас такого?
|
|
| |
|