Показать сообщение отдельно
Старый 30.06.2011, 21:07   #1
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
PhysX Ragdoll цилиндра из трех секций

Хотел сделать Ragdoll персонажа, но решил вначале попробовать с чем-то небольшим. Вроде Ragdoll работает, но при создании цилиндр чего-то искривляет вроде и позицию и поворот хулов задал, а создается все ровно криво. Может кто видит то, чего не вижу я в коде?
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

pxCreateWorld(1,"")
;-------GLOBAL VARIABLES----------------
Global player,playerpx,Bone[3],Hull[3],Hulls
Global cam
;---------------------------------------

CreatePlayer()

Repeat

If KeyHit(57) pxBodyAddForceAtLocalPos Hull[2],0,10000,0,1,1,1,0
If KeyDown(203) MoveEntity cam,0,0.1,0
If KeyDown(205) MoveEntity cam,0,0.-0.1,0
If KeyDown(200) MoveEntity cam,0,0,0.1
If KeyDown(20 MoveEntity cam,0,0.0,-0.1

UpdateWorld()
pxRenderPhysic(600,0)
UpdateRagdolls()
RenderWorld()
;==============TEXT======================
;========================================
Flip
Until KeyHit(1)
End

;-------------CREATE PLAYER--------------
Function CreatePlayer()
cam = CreateCamera()
PositionEntity cam,0,4,-10
CameraClsColor cam,128,128,128
CreateLight()
plane = CreatePlane()
EntityColor plane, 0,128,128

player = LoadAnimMesh("player.b3d")
playerpx = LoadAnimMesh("playerpx.b3d")
жHideEntity playerpx
PositionEntity player,0,5,5
PositionEntity playerpx,0,5,5

Hulls = FindChild(playerpx,"Bone01px")
Hull[1] = BodyCreateHull(Hulls, 10)
pxBodySetPosition Hull[1],EntityX(Hulls,1),EntityY(Hulls,1),EntityZ(Hulls,1 )
pxBodySetRotation Hull[1],EntityPitch(Hulls,1),EntityYaw(Hulls,1),EntityRol l(Hulls,1)

Hulls = FindChild(playerpx,"Bone02px")
Hull[2] = BodyCreateHull(Hulls, 10)
pxBodySetPosition Hull[2],EntityX(Hulls,1),EntityY(Hulls,1),EntityZ(Hulls,1 )
pxBodySetRotation Hull[2],EntityPitch(Hulls,1),EntityYaw(Hulls,1),EntityRol l(Hulls,1)

Hulls = FindChild(playerpx,"Bone03px")
Hull[3] = BodyCreateHull(Hulls, 10)
pxBodySetPosition Hull[3],EntityX(Hulls,1),EntityY(Hulls,1),EntityZ(Hulls,1 )
pxBodySetRotation Hull[3],EntityPitch(Hulls,1),EntityYaw(Hulls,1),EntityRol l(Hulls,1)

Joint1 = pxJointCreateSpherical(Hull[1],Hull[2],pxBodyGetPositionX(Hull[2]),pxBodyGetPositionY(Hull[2]),pxBodyGetPositionZ(Hull[2]),0,1,0)
pxJointSphericalSetLimitAngle(Joint1, 30,1, 0)
pxJointSphericalSetLimitTwist(Joint1,-10,10,10,1,0)
pxJointSphericalSetLimitSpring(Joint1, 10, 1, 0)

Joint2 = pxJointCreateSpherical(Hull[2],Hull[3],pxBodyGetPositionX(Hull[3]),pxBodyGetPositionY(Hull[3]),pxBodyGetPositionZ(Hull[3]),0,1,0)
pxJointSphericalSetLimitAngle(Joint2, 30,1, 0)
pxJointSphericalSetLimitTwist(Joint2,-10,10,10,1,0)
pxJointSphericalSetLimitSpring(Joint2, 10, 1, 0)

Bone[1] = FindChild(player,"Bone01")
Bone[2] = FindChild(player,"Bone02")
Bone[3] = FindChild(player,"Bone03")

DeparentAllChilds(player)

End Function
;----------------------------------------
;-------------UPDATE RAGDOLLS------------
Function UpdateRagdolls()
pxBodySetEntity Bone[1],Hull[1]
pxBodySetEntity Bone[2],Hull[2]
pxBodySetEntity Bone[3],Hull[3]
End Function
;----------------------------------------
;-------------CREATE HULL----------------
Function BodyCreateHull%(mesh%, mass#)
Local nsurf = CountSurfaces(mesh)
Local nvert = 0
For ns = 1 To nsurf
Local surf = GetSurface(mesh,ns)
nvert = nvert + CountVertices(surf)
Next
vbank = CreateBank(nvert*4*3)
nv = 0
For ns = 1 To nsurf
surf = GetSurface(mesh,ns)
nvv = CountVertices(surf)
For nvc = 0 To nvv - 1
PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
nv = nv+1
Next
Next
Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
FreeBank vbank
Return bbb
End Function
;----------------------------------------
;-------------DEPARENT ALL CHILDS--------
Function DeparentAllChilds(mesh)
Repeat
If CountChildren(mesh) = 0 Then Exit
DeparentAllChilds(GetChild(mesh,1))
Forever
EntityParent mesh,0
End Function
;----------------------------------------
Вложения
Тип файла: rar player, playerpx.rar (3.5 Кб, 745 просмотров)
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием