Попробуй в этом направлении копать:
Как перевести вектор из одного базиса в другой?
а вообще на блитце я вот так поворачивал и все работало:
Function VectorRoller(selectedmesh,alfa#,beta#,gama#)
surf=GetSurface(selectedmesh,1)
qverts=CountVertices (surf)
For i=0 To qverts-1
;for simulation rotateentity
;x0#=saveddata#(i,0)
;y0#=saveddata#(i,1)
;z0#=saveddata#(i,2)
;for simulation turnentity
x0#=VertexX(surf,i)
y0#=VertexY(surf,i)
z0#=VertexZ(surf,i)
;alfa vocrug z
x1#=x0#*Cos(alfa)+y0#*Sin(alfa)
y1#=-x0#*Sin(alfa)+y0#*Cos(alfa)
z1#=z0#
;beta vokrug x
x2#=x1#
y2#=y1*Cos(beta)+z1*Sin(beta)
z2#=-y1*Sin(beta)+z1*Cos(beta)
;gama wokrug y
x3#=x2*Cos(-gama)+z2*Sin(-gama)
y3#=y2
z3#=-x2*Sin(-gama)+z2*Cos(-gama)
VertexCoords surf,i,x3,y3,z3
Next
UpdateNormals selectedmesh;it makes this function in two times slower
End Function