Показать сообщение отдельно
Старый 24.07.2012, 21:48   #7
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Xors3D + PhysX Проблемы

По мере изучение такого союза сам написал пару функций. Инклюдим и пользуемся.
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
__________________
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо burovalex за это полезное сообщение:
jfkkk (13.05.2013), moka (25.07.2012), tirarex (10.05.2013), und3rgr0und (27.01.2014)