Overview
This is where I am going to add/document my efforts into developing the models for the new game. At present the engine I have built handles Wavefront OBJ file format which include the material files. This was chosen because its easy to understand and is supported in Blender which is the tool I am currently learning to develop the models.
As an aside I got bored one evening and decided I wanted to see the classic Elite ships/objects rendered in my game engine. I found the classic models online at https://elite.bbcelite.com/ and decided to write a Python program to take the ship details and convert them to OBJ Wavefront format so that I could view them in Blender and load them into my game engine.
Progress Log
Python Conversion Program
Take the details found online and convert the data to Wavefront Obj format
.SHIP_COBRA_MK_3
EQUB 3 \ Max. canisters on demise = 3
EQUW 95 * 95 \ Targetable area = 95 * 95
EQUB LO(SHIP_COBRA_MK_3_EDGES - SHIP_COBRA_MK_3) \ Edges data offset (low)
EQUB LO(SHIP_COBRA_MK_3_FACES - SHIP_COBRA_MK_3) \ Faces data offset (low)
EQUB 157 \ Max. edge count = (157 - 1) / 4 = 39
EQUB 84 \ Gun vertex = 84 / 4 = 21
EQUB 42 \ Explosion count = 9, as (4 * n) + 6 = 42
EQUB 168 \ Number of vertices = 168 / 6 = 28
EQUB 38 \ Number of edges = 38
EQUW 0 \ Bounty = 0
EQUB 52 \ Number of faces = 52 / 4 = 13
EQUB 50 \ Visibility distance = 50
EQUB 150 \ Max. energy = 150
EQUB 28 \ Max. speed = 28
EQUB HI(SHIP_COBRA_MK_3_EDGES - SHIP_COBRA_MK_3) \ Edges data offset (low)
EQUB HI(SHIP_COBRA_MK_3_FACES - SHIP_COBRA_MK_3) \ Faces data offset (low)
EQUB 1 \ Normals are scaled by = 2^1 = 2
EQUB %00010011 \ Laser power = 2
\ Missiles = 3
.SHIP_COBRA_MK_3_VERTICES
\ x, y, z, face1, face2, face3, face4, visibility
VERTEX 32, 0, 76, 15, 15, 15, 15, 31 \ Vertex 0
VERTEX -32, 0, 76, 15, 15, 15, 15, 31 \ Vertex 1
VERTEX 0, 26, 24, 15, 15, 15, 15, 31 \ Vertex 2
VERTEX -120, -3, -8, 3, 7, 10, 10, 31 \ Vertex 3
VERTEX 120, -3, -8, 4, 8, 12, 12, 31 \ Vertex 4
VERTEX -88, 16, -40, 15, 15, 15, 15, 31 \ Vertex 5
VERTEX 88, 16, -40, 15, 15, 15, 15, 31 \ Vertex 6
VERTEX 128, -8, -40, 8, 9, 12, 12, 31 \ Vertex 7
VERTEX -128, -8, -40, 7, 9, 10, 10, 31 \ Vertex 8
VERTEX 0, 26, -40, 5, 6, 9, 9, 31 \ Vertex 9
VERTEX -32, -24, -40, 9, 10, 11, 11, 31 \ Vertex 10
VERTEX 32, -24, -40, 9, 11, 12, 12, 31 \ Vertex 11
VERTEX -36, 8, -40, 9, 9, 9, 9, 20 \ Vertex 12
VERTEX -8, 12, -40, 9, 9, 9, 9, 20 \ Vertex 13
VERTEX 8, 12, -40, 9, 9, 9, 9, 20 \ Vertex 14
VERTEX 36, 8, -40, 9, 9, 9, 9, 20 \ Vertex 15
VERTEX 36, -12, -40, 9, 9, 9, 9, 20 \ Vertex 16
VERTEX 8, -16, -40, 9, 9, 9, 9, 20 \ Vertex 17
VERTEX -8, -16, -40, 9, 9, 9, 9, 20 \ Vertex 18
VERTEX -36, -12, -40, 9, 9, 9, 9, 20 \ Vertex 19
VERTEX 0, 0, 76, 0, 11, 11, 11, 6 \ Vertex 20
VERTEX 0, 0, 90, 0, 11, 11, 11, 31 \ Vertex 21
VERTEX -80, -6, -40, 9, 9, 9, 9, 8 \ Vertex 22
VERTEX -80, 6, -40, 9, 9, 9, 9, 8 \ Vertex 23
VERTEX -88, 0, -40, 9, 9, 9, 9, 6 \ Vertex 24
VERTEX 80, 6, -40, 9, 9, 9, 9, 8 \ Vertex 25
VERTEX 88, 0, -40, 9, 9, 9, 9, 6 \ Vertex 26
VERTEX 80, -6, -40, 9, 9, 9, 9, 8 \ Vertex 27
.SHIP_COBRA_MK_3_EDGES
\ vertex1, vertex2, face1, face2, visibility
EDGE 0, 1, 0, 11, 31 \ Edge 0
EDGE 0, 4, 4, 12, 31 \ Edge 1
EDGE 1, 3, 3, 10, 31 \ Edge 2
EDGE 3, 8, 7, 10, 31 \ Edge 3
EDGE 4, 7, 8, 12, 31 \ Edge 4
EDGE 6, 7, 8, 9, 31 \ Edge 5
EDGE 6, 9, 6, 9, 31 \ Edge 6
EDGE 5, 9, 5, 9, 31 \ Edge 7
EDGE 5, 8, 7, 9, 31 \ Edge 8
EDGE 2, 5, 1, 5, 31 \ Edge 9
EDGE 2, 6, 2, 6, 31 \ Edge 10
EDGE 3, 5, 3, 7, 31 \ Edge 11
EDGE 4, 6, 4, 8, 31 \ Edge 12
EDGE 1, 2, 0, 1, 31 \ Edge 13
EDGE 0, 2, 0, 2, 31 \ Edge 14
EDGE 8, 10, 9, 10, 31 \ Edge 15
EDGE 10, 11, 9, 11, 31 \ Edge 16
EDGE 7, 11, 9, 12, 31 \ Edge 17
EDGE 1, 10, 10, 11, 31 \ Edge 18
EDGE 0, 11, 11, 12, 31 \ Edge 19
EDGE 1, 5, 1, 3, 29 \ Edge 20
EDGE 0, 6, 2, 4, 29 \ Edge 21
EDGE 20, 21, 0, 11, 6 \ Edge 22
EDGE 12, 13, 9, 9, 20 \ Edge 23
EDGE 18, 19, 9, 9, 20 \ Edge 24
EDGE 14, 15, 9, 9, 20 \ Edge 25
EDGE 16, 17, 9, 9, 20 \ Edge 26
EDGE 15, 16, 9, 9, 19 \ Edge 27
EDGE 14, 17, 9, 9, 17 \ Edge 28
EDGE 13, 18, 9, 9, 19 \ Edge 29
EDGE 12, 19, 9, 9, 19 \ Edge 30
EDGE 2, 9, 5, 6, 30 \ Edge 31
EDGE 22, 24, 9, 9, 6 \ Edge 32
EDGE 23, 24, 9, 9, 6 \ Edge 33
EDGE 22, 23, 9, 9, 8 \ Edge 34
EDGE 25, 26, 9, 9, 6 \ Edge 35
EDGE 26, 27, 9, 9, 6 \ Edge 36
EDGE 25, 27, 9, 9, 8 \ Edge 37
.SHIP_COBRA_MK_3_FACES
\ normal_x, normal_y, normal_z, visibility
FACE 0, 62, 31, 31 \ Face 0
FACE -18, 55, 16, 31 \ Face 1
FACE 18, 55, 16, 31 \ Face 2
FACE -16, 52, 14, 31 \ Face 3
FACE 16, 52, 14, 31 \ Face 4
FACE -14, 47, 0, 31 \ Face 5
FACE 14, 47, 0, 31 \ Face 6
FACE -61, 102, 0, 31 \ Face 7
FACE 61, 102, 0, 31 \ Face 8
FACE 0, 0, -80, 31 \ Face 9
FACE -7, -42, 9, 31 \ Face 10
FACE 0, -30, 6, 31 \ Face 11
FACE 7, -42, 9, 31 \ Face 12
Results in the following OBJ file format
# Python Code Conversion
# http://localhost:8888/lab/tree/FileConversion.ipynb
mtllib ship.mtl
o Cobra
v 32 0 76
v -32 0 76
v 0 26 24
v -120 -3 -8
v 120 -3 -8
v -88 16 -40
v 88 16 -40
v 128 -8 -40
v -128 -8 -40
v 0 26 -40
v -32 -24 -40
v 32 -24 -40
v -36 8 -40
v -8 12 -40
v 8 12 -40
v 36 8 -40
v 36 -12 -40
v 8 -16 -40
v -8 -16 -40
v -36 -12 -40
v 0 0 76
v 0 0 90
v -80 -6 -40
v -80 6 -40
v -88 0 -40
v 80 6 -40
v 88 0 -40
v 80 -6 -40
vn 0.000000 0.894427 0.447214
vn -0.301363 0.914023 0.271557
vn 0.301363 0.914023 0.271557
vn -0.283418 0.921946 0.263988
vn 0.283418 0.921946 0.263988
vn -0.112910 0.993605 0.000000
vn 0.112910 0.993605 0.000000
vn -0.514488 0.857481 -0.005359
vn 0.514488 0.857481 -0.005359
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -0.000000 -1.000000
vn -0.146747 -0.971064 0.188415
vn -0.161079 -0.966473 0.199960
vn 0.000000 -0.979260 0.202606
vn 0.000000 -0.979260 0.202606
vn 0.146747 -0.971064 0.188415
vn 0.161079 -0.966473 0.199960
usemtl Material.001
f 1//1 3//1 2//1
f 2//2 3//2 6//2
f 1//3 7//3 3//3
f 2//4 6//4 4//4
f 1//5 5//5 7//5
f 3//6 10//6 6//6
f 3//7 7//7 10//7
f 4//8 6//8 9//8
f 5//9 8//9 7//9
f 13//10 14//10 19//10
f 13//11 19//11 20//11
f 15//12 16//12 17//12
f 15//13 17//13 18//13
f 23//14 25//14 24//14
f 26//15 27//15 28//15
f 6//16 10//16 7//16
f 6//17 7//17 8//17
f 6//18 8//18 12//18
f 6//19 12//19 11//19
f 6//20 11//20 9//20
f 2//21 4//21 9//21
f 2//22 9//22 11//22
f 1//23 2//23 11//23
f 1//24 11//24 12//24
f 1//25 8//25 5//25
f 1//26 12//26 8//26
Main stumbling blocks included:
- Triangulation of certain faces
- Ordering of vertices for the correct 'normal'
- Learning Ploty to draw lines from/to mode
[Milestone Title]
[Description of what you accomplished, problems solved, or experiments conducted]
[Milestone Title]
[Description of what you accomplished, problems solved, or experiments conducted]
Gallery
Conversion Program
Loaded into Game Engine
[Image Description]
[Image Description]