🎨 Models

3D Model Creation and Animation

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

27/11/2025

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
[DATE]

[Milestone Title]

[Description of what you accomplished, problems solved, or experiments conducted]

[DATE]

[Milestone Title]

[Description of what you accomplished, problems solved, or experiments conducted]