По мере изучение такого союза сам написал пару функций. Инклюдим и пользуемся.
Function xConvertTerrainToPx(terrain,sx#,sy#,sz#)
nSize = xTerrainSize (terrain)
bank = CreateBank(nSize*nSize*4)
For z=1 To nSize-1
For x = 1 To nSize-1
y# = xTerrainHeight(terrain,x,z)
PokeFloat bank,(z*(nSize)+x)*4,y
Next
Next
body# = pxCreateTerrain(nSize,bank, sx, sy, sz)
FreeBank(bank)
Return body
End Function
;--------------------------------------------------------------------
;;===========================xMesh to Hull======================================================
Function xConvertMeshToHull%(mesh%, mass#)
Local nsurf = xCountSurfaces(mesh)
Local nvert = 0
For ns = 0 To nsurf-1
Local surf = xGetSurface(mesh,ns)
nvert = nvert + xCountVertices(surf)
Next
vbank = CreateBank(nvert*4*3)
nv = 0
For ns = 0 To nsurf-1
surf = xGetSurface(mesh,ns)
nvv = xCountVertices(surf)
For nvc = 0 To nvv - 1
PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)
PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)
PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)
nv = nv+1
Next
Next
Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
FreeBank vbank
Return bbb
End Function
;============================xMesh to triMesh===================================================
Function xConvertMeshToTrimesh(mesh, mass# = 0)
nsurf = xCountSurfaces(mesh)
nvert = 0
nface=0
For ns = 0 To nsurf-1
Local surf = xGetSurface(mesh,ns)
nface = nface+xCountTriangles(surf)
nvert = nvert +xCountVertices(surf)
Next
fbank = CreateBank(nface*4*3)
nf = 0
vbank = CreateBank(nvert*4*3)
nv = 0
pnvv = 0
For ns = 0 To nsurf-1
surf = xGetSurface(mesh,ns)
nfv = xCountTriangles(surf)
For nfc = 0 To nfv -1
PokeInt fbank,nf*12+0,xTriangleVertex(surf,nfc,0)+pnvv+ns
PokeInt fbank,nf*12+4,xTriangleVertex(surf,nfc,1)+pnvv+ns
PokeInt fbank,nf*12+8,xTriangleVertex(surf,nfc,2)+pnvv+ns
nf=nf+1
Next
nvv = xCountVertices(surf)
For nvc = 0 To nvv - 1
PokeFloat vbank,nv*12+0,xVertexX(surf,nvc)*xEntityScaleX(mesh)
PokeFloat vbank,nv*12+4,xVertexY(surf,nvc)*xEntityScaleY(mesh)
PokeFloat vbank,nv*12+8,xVertexZ(surf,nvc)*xEntityScaleZ(mesh)
nv = nv+1
Next
pnvv=pnvv+nvv-1
Next
bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
FreeBank vbank
FreeBank fbank
Return bbb%
End Function
Function pxEntityScaleX#(ent%)
row=0
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
Function pxEntityScaleY#(ent%)
row=1
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
Function pxEntityScaleZ#(ent%)
row=2
el1# = xGetMatElement(ent,row,0)
el2# = xGetMatElement(ent,row,1)
el3# = xGetMatElement(ent,row,2)
Return Sqr(el1*el1+el2*el2+el3*el3)
End Function
;-----------------------------------------------------------------------------------
Function xpxBodySetEntity(ent,bod,x#=0,y#=0,z#=0)
xPositionEntity ent,pxBodyGetPositionX(bod)+x,pxBodyGetPositionY(bod)+y,pxBodyGetPositionZ(bod)+z
xRotateEntity ent,pxBodyGetRotationPitch(bod),pxBodyGetRotationYaw(bod),pxBodyGetRotationRoll(bod)
End Function