I tested it in my engine and it seems to work. Gmax forum moderators have posted a .3ds import script and a new .md3 export script in the GMax forum, and it appears to be okay for use if you export .md3 files:
Method Load:TMesh(stream:TStream)
If stream.ReadString(4)<>"IDP3" Return Null
If stream.ReadInt()<>15 Return Null
mesh:TMesh=CreateMesh()
name$=stream.ReadString(64)
flags=stream.ReadInt()
numFrames=stream.ReadInt()
numTags=stream.ReadInt()
numSurfaces=stream.ReadInt()
numSkins=stream.ReadInt()
offsetFrames=stream.ReadInt()
offsetTags=stream.ReadInt()
offsetSurfaces=stream.ReadInt()
offsetEnd=stream.ReadInt()
Notify numSurfaces
'Load surfaces
stream.seek offsetSurfaces
For surface=1 To numSurfaces
surf:TSurface=CreateSurface(mesh)
offsetStart=stream.pos()
ident=stream.ReadInt()
name$=stream.ReadString(64)
flags=stream.ReadInt()
numFrames=stream.ReadInt()
numShaders=stream.ReadInt()
numVertices=stream.ReadInt()
numTriangles=stream.ReadInt()
offsetTriangles=stream.ReadInt()
offsetShaders=stream.ReadInt()
offsetTexcoords=stream.ReadInt()
offsetVertices=stream.ReadInt()
offsetEnd=stream.ReadInt()
'Vertices
stream.seek offsetVertices+offsetStart
For vertex=0 To numVertices-1
x#=Float(ReadSignedShort(stream))/64.0
z#=Float(ReadSignedShort(stream))/64.0
y#=Float(ReadSignedShort(stream))/64.0
lng#=Float(stream.ReadByte())/256.0*360.0
lat#=Float(stream.ReadByte())/256.0*360.0
nx#=Cos(lat)*Sin(lng)
nz#=Sin(lat)*Sin(lng)
ny#=Cos(lng)
Normalize nx,ny,nz
nx=VectorX()
ny=VectorY()
vz=VectorZ()
surf.addvertex x,y,z,nx,ny,nz
Next
'TexCoords
stream.seek offsetTexcoords+offsetStart
For v=0 To numVertices-1
u0#=stream.ReadFloat()
v0#=stream.ReadFloat()
VertexTexCoords surf,v,u0,v0
Next
'Triangles
stream.seek offsetTriangles+offsetStart
For triangle=0 To numTriangles-1
a=stream.ReadInt()
b=stream.ReadInt()
c=stream.ReadInt()
AddTriangle surf,a,b,c
Next
stream.seek offsetend+offsetStart
Next
Return mesh
EndMethod
Function ReadSignedShort:Int(stream:TStream)
Local result:Int
result=stream.readshort()
If result>32767 result=result-65535
Return result
EndFunction
|