EntityOrder messes with the z-ordering of the meshes triangles, so there is nothing you can do about it.
Correct, I think the zbuffer is disabled when drawing meshes that use EntityOrder. But you should be able to compensate for this by using the function below. (demo included so you can see the difference)
PCD: Try running the gun mesh through this ZSortMesh() function. It rebuilds the triangle index so that polys furthest along the Z axis will get rendered first.
Graphics3D 800,600,32,2
cam=CreateCamera()
PositionEntity cam,-1,1,-4
light=CreateLight()
RotateEntity light,20,20,0
;Create an unsorted mesh
mesh=CreateSphere(16)
EntityColor mesh,255,0,0
mesh2=CreateSphere(16)
PositionMesh mesh2,0,0,4
AddMesh mesh2,mesh
FreeEntity mesh2
EntityOrder mesh,-1
While Not KeyHit(1)
If KeyHit(57) ZSortMesh mesh
RenderWorld
Text 0,0,"Press SPACE to Z-Sort mesh"
Flip
Wend
Type ztri
Field z#
Field v0,v1,v2
End Type
Function ZSortMesh(mesh)
Local temp.ztri = New ztri
Local tris.ztri[4096] ; assuming meshes have 4096 or less triangles, increase as needed
For i=0 To 4095
tris[i] = New ztri
Next
surfCount = CountSurfaces(mesh)
For i = 1 To surfCount
surf = GetSurface(mesh,i)
triCount = CountTriangles(surf)
;Store each triangles Z distance (based on its vertices average Z value)
For t = 0 To triCount-1
z = VertexZ(surf,TriangleVertex(surf,t,0))
z=z+VertexZ(surf,TriangleVertex(surf,t,1))
z=z+VertexZ(surf,TriangleVertex(surf,t,2))
z=z/3
tris[t]\z = z
tris[t]\v0 = TriangleVertex(surf,t,0) ;store triangle vertex indexes
tris[t]\v1 = TriangleVertex(surf,t,1)
tris[t]\v2 = TriangleVertex(surf,t,2)
Next
;Sort the triangles based on Z distance
For x=0 To triCount-1
For y=0 To triCount-1
If x<>y; don't compare with itself
If tris[y]\z < tris[x]\z
;Swap the 2 tris
temp\z = tris[y]\z
temp\v0 = tris[y]\v0
temp\v1 = tris[y]\v1
temp\v2 = tris[y]\v2
tris[y]\z = tris[x]\z
tris[y]\v0 = tris[x]\v0
tris[y]\v1 = tris[x]\v1
tris[y]\v2 = tris[x]\v2
tris[x]\z = temp\z
tris[x]\v0 = temp\v0
tris[x]\v1 = temp\v1
tris[x]\v2 = temp\v2
End If
End If
Next
Next
;Clear the existing triangles
ClearSurface surf,False,True
;Add the sorted triangles
For x = 0 To triCount-1
AddTriangle surf,tris[x]\v0,tris[x]\v1,tris[x]\v2
Next
Next
Delete Each ztri
End Function