Success, my approach was a bit different…

As I don’t have 3ds max, only Sketchup Make, I removed the binary parts of the gsm file, and modified my wavefront obj importer to import the remaining content. Revelant commands for gsm are as follows:

BASE - clear indices (indices start at 1)

VERT x,y,z - vertex coordinate

TEVE x,y,z,u,v - vertex coordinate with uv

VECT x,y,z - normal vector

EDGE v1,v2,p1,p2,status - define an edge from two vertices, p1 and p2 are polygon indices which I ignored.

PGON n,vect,status,edge1,edge2,…,edgeN - define a polygon from 3 or more edges

I still needed to specify the image file as part of the import.

ruby import snipette:

```
if command == 'VERT'
x = csv[1].to_f * scale
y = csv[2].to_f * scale
z = csv[3].to_f * scale
pt = Geom::Point3d.new(x,y,z)
uv = Geom::Point3d.new(0.0,0.0,0.0)
vertices.push(pt)
textures.push(uv)
end
if command == 'TEVE'
x = csv[1].to_f * scale
y = csv[2].to_f * scale
z = csv[3].to_f * scale
u = csv[4].to_f
v = csv[5].to_f
pt = Geom::Point3d.new(x,y,z)
uv = Geom::Point3d.new(u,v,0.0)
vertices.push(pt)
textures.push(uv)
end
if command == 'VECT'
x = csv[1].to_f
y = csv[2].to_f
z = csv[3].to_f
normals.push([x,y,z])
end
if command == 'EDGE'
# EDGE vert1, vert2, pgon1, pgon2, status
v1 = csv[1].to_i
v2 = csv[2].to_i
edges.push([v1,v2])
end
if command == 'PGON'
#PGON 3, 0, 2, 619 , 620 , -615 !#397
n = csv[1].to_i
vect = csv[2].to_i # normal
status = csv[3].to_i
e1 = csv[4].to_i
e2 = csv[5].to_i
e3 = csv[6].to_i
```