From 47d685a41cdc8a04944c2a5763ceab382b3f0550 Mon Sep 17 00:00:00 2001 From: wgroeneveld Date: Wed, 15 Jul 2020 12:03:50 +0200 Subject: [PATCH] back-face culling performance boost! --- README.md | 10 + demos/demo2-blender-import/converter.js | 28 +- demos/demo2-blender-import/src/mesh.cpp | 899 +----------------- engine/CMakeLists.txt | 2 +- engine/include/libgba-bitmap-engine/face.h | 32 + .../include/libgba-bitmap-engine/matrixfx.h | 7 + engine/include/libgba-bitmap-engine/mesh.h | 22 +- .../libgba-bitmap-engine/renderer/renderer.h | 9 +- engine/include/libgba-bitmap-engine/vertex.h | 13 +- engine/src/mesh.cpp | 14 +- engine/src/renderer/gba_engine.cpp | 8 +- engine/src/renderer/pixelrenderer.cpp | 5 +- ...zerrenderer.cpp => rasterizerrenderer.cpp} | 29 +- engine/src/renderer/wirerenderer.cpp | 14 +- img/octa.gif | Bin 0 -> 127710 bytes 15 files changed, 174 insertions(+), 918 deletions(-) create mode 100644 engine/include/libgba-bitmap-engine/face.h rename engine/src/renderer/{raserizerrenderer.cpp => rasterizerrenderer.cpp} (69%) create mode 100644 img/octa.gif diff --git a/README.md b/README.md index 529e54b..9ae678b 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,16 @@ There is a fast way to lines into VRAM. I tried implementing Z-buffering, but th At this point, I do not think it's that interesting to go on to texture mapping other than the fun of it. Even with a lot of haxx and tricks, the colored monkey won't ever spin at 30FPS... +#### **Demo 3b**: with back-face culling + +It did improve performance. I exported a few Babylon meshes, and the octahedron with 8 faces does run at 20FPS compared to 11FPS when back-face culling was implemented (that omits rendering certain faces if z < 0) + +![design](https://github.com/wgroeneveld/gba-bitmap-engine/blob/master/img/octa.gif?raw=true) + +Changing colors indicate certain triangles were not drawn (into the background). It does not help a lot with our monkey, alas. Too many vertices... + +More examples of meshes (box, cylinder, octahedron, sphere, torus) included. + ### GBA-Specific problems **Fixed-point math** sums up things nicely. diff --git a/demos/demo2-blender-import/converter.js b/demos/demo2-blender-import/converter.js index 0d02cef..a692f9c 100644 --- a/demos/demo2-blender-import/converter.js +++ b/demos/demo2-blender-import/converter.js @@ -23,9 +23,13 @@ function addMesh(x, y, z) { result += `\t obj->add(VectorFx::fromFloat(${x}, ${y}, ${z}));\n`; vertices++; } +function addMeshWithNormals(x, y, z, nx, ny, nz) { + result += `\t obj->add(VectorFx::fromFloat(${x}, ${y}, ${z}), VectorFx::fromFloat(${nx}, ${ny}, ${nz}));\n`; + vertices++; +} var faces = 0; function addFace(a, b, c) { - result += `\t obj->addFace({ ${a}, ${b}, ${c}});\n`; + result += `\t obj->addFace(${a}, ${b}, ${c});\n`; faces++; } function setPosition(position) { @@ -39,14 +43,14 @@ function done() { for(var meshIndex = 0; meshIndex < jsonObject.meshes.length; meshIndex++) { const mesh = jsonObject.meshes[meshIndex]; + var data = undefined; var verticesArray = mesh.vertices; var indicesArray = mesh.indices; var uvCount = mesh.uvCount; if(mesh.geometryId) { - const data = jsonObject.geometries.vertexData.find(v => v.id === mesh.geometryId); - verticesArray = data.positions - indicesArray = data.indices - // also contains .normals and .uvs + data = jsonObject.geometries.vertexData.find(v => v.id === mesh.geometryId); + verticesArray = data.positions; + indicesArray = data.indices; } var verticesStep = 1; @@ -73,7 +77,19 @@ for(var meshIndex = 0; meshIndex < jsonObject.meshes.length; meshIndex++) { var z = verticesArray[index * verticesStep + 2]; if(x !== undefined && y !== undefined && z !== undefined) { - addMesh(x, y, z); + if(data && data.normals) { + var nx = data.normals[index * verticesStep]; + var ny = data.normals[index * verticesStep + 1]; + var nz = data.normals[index * verticesStep + 2]; + + addMeshWithNormals(x, y, z, nx, ny, nz); + } else { + var nx = verticesArray[index * verticesStep + 3]; + var ny = verticesArray[index * verticesStep + 4]; + var nz = verticesArray[index * verticesStep + 5]; + + addMeshWithNormals(x, y, z, nx, ny, nz); + } } else { console.log(`WARN; vertices index ${index} with step ${verticesStep} contains invalid data: ${x}, ${y}, ${z}`) } diff --git a/demos/demo2-blender-import/src/mesh.cpp b/demos/demo2-blender-import/src/mesh.cpp index 9ee5e51..efc57af 100644 --- a/demos/demo2-blender-import/src/mesh.cpp +++ b/demos/demo2-blender-import/src/mesh.cpp @@ -1,873 +1,38 @@ #include Mesh* createMesh() { auto obj = new Mesh(); - obj->add(VectorFx::fromFloat(1.5308085657314598e-17, 3.061616997868383e-17, 0.25)); - obj->add(VectorFx::fromFloat(1.647334429390665e-17, -0.09567085809127242, 0.26903011687217826)); - obj->add(VectorFx::fromFloat(1.9791720139357513e-17, -0.17677669529663687, 0.3232233047033631)); - obj->add(VectorFx::fromFloat(2.4758020552349235e-17, -0.23096988312782163, 0.40432914190872743)); - obj->add(VectorFx::fromFloat(3.0616171314629196e-17, -0.25, 0.49999999999999994)); - obj->add(VectorFx::fromFloat(3.6474322076909154e-17, -0.23096988312782166, 0.5956708580912725)); - obj->add(VectorFx::fromFloat(4.1440622489900873e-17, -0.17677669529663692, 0.6767766952966369)); - obj->add(VectorFx::fromFloat(4.475899833535174e-17, -0.0956708580912726, 0.7309698831278216)); - obj->add(VectorFx::fromFloat(4.5924256971943795e-17, -6.123233995736766e-17, 0.75)); - obj->add(VectorFx::fromFloat(4.475899833535174e-17, 0.09567085809127249, 0.7309698831278217)); - obj->add(VectorFx::fromFloat(4.144062248990088e-17, 0.17677669529663684, 0.676776695296637)); - obj->add(VectorFx::fromFloat(3.647432207690916e-17, 0.23096988312782163, 0.5956708580912726)); - obj->add(VectorFx::fromFloat(3.06161713146292e-17, 0.25, 0.5000000000000001)); - obj->add(VectorFx::fromFloat(2.4758020552349244e-17, 0.23096988312782168, 0.40432914190872754)); - obj->add(VectorFx::fromFloat(1.979172013935753e-17, 0.1767766952966371, 0.32322330470336336)); - obj->add(VectorFx::fromFloat(1.6473344293906656e-17, 0.09567085809127263, 0.26903011687217837)); - obj->add(VectorFx::fromFloat(1.5308085657314598e-17, 9.184850993605148e-17, 0.25)); - obj->add(VectorFx::fromFloat(0.09567085653543472, 3.061616997868383e-17, 0.2309698760509491)); - obj->add(VectorFx::fromFloat(0.10295336685995762, -0.09567085809127242, 0.24855141099175748)); - obj->add(VectorFx::fromFloat(0.12369220165273821, -0.17677669529663687, 0.2986193864964557)); - obj->add(VectorFx::fromFloat(0.15473006131458114, -0.23096988312782163, 0.37355140716178153)); - obj->add(VectorFx::fromFloat(0.19134171307086942, -0.25, 0.46193975210189814)); - obj->add(VectorFx::fromFloat(0.22795336482715772, -0.23096988312782166, 0.5503280970420148)); - obj->add(VectorFx::fromFloat(0.25899122448900064, -0.17677669529663692, 0.6252601177073406)); - obj->add(VectorFx::fromFloat(0.27973005928178124, -0.0956708580912726, 0.6753280932120389)); - obj->add(VectorFx::fromFloat(0.28701256960630417, -6.123233995736766e-17, 0.6929096281528473)); - obj->add(VectorFx::fromFloat(0.27973005928178124, 0.09567085809127249, 0.6753280932120389)); - obj->add(VectorFx::fromFloat(0.2589912244890007, 0.17677669529663684, 0.6252601177073407)); - obj->add(VectorFx::fromFloat(0.22795336482715775, 0.23096988312782163, 0.5503280970420149)); - obj->add(VectorFx::fromFloat(0.19134171307086947, 0.25, 0.46193975210189825)); - obj->add(VectorFx::fromFloat(0.1547300613145812, 0.23096988312782168, 0.3735514071617816)); - obj->add(VectorFx::fromFloat(0.12369220165273831, 0.1767766952966371, 0.2986193864964559)); - obj->add(VectorFx::fromFloat(0.10295336685995767, 0.09567085809127263, 0.24855141099175757)); - obj->add(VectorFx::fromFloat(0.09567085653543472, 9.184850993605148e-17, 0.2309698760509491)); - obj->add(VectorFx::fromFloat(0.1767766922712326, 3.061616997868383e-17, 0.1767766922712326)); - obj->add(VectorFx::fromFloat(0.19023301672802723, -0.09567085809127242, 0.19023301672802723)); - obj->add(VectorFx::fromFloat(0.22855338668174907, -0.17677669529663687, 0.22855338668174907)); - obj->add(VectorFx::fromFloat(0.2859038731819626, -0.23096988312782163, 0.2859038731819626)); - obj->add(VectorFx::fromFloat(0.35355338454246515, -0.25, 0.35355338454246515)); - obj->add(VectorFx::fromFloat(0.4212028959029678, -0.23096988312782166, 0.4212028959029678)); - obj->add(VectorFx::fromFloat(0.4785533824031813, -0.17677669529663692, 0.4785533824031813)); - obj->add(VectorFx::fromFloat(0.5168737523569031, -0.0956708580912726, 0.5168737523569031)); - obj->add(VectorFx::fromFloat(0.5303300768136978, -6.123233995736766e-17, 0.5303300768136978)); - obj->add(VectorFx::fromFloat(0.5168737523569031, 0.09567085809127249, 0.5168737523569031)); - obj->add(VectorFx::fromFloat(0.47855338240318135, 0.17677669529663684, 0.47855338240318135)); - obj->add(VectorFx::fromFloat(0.4212028959029679, 0.23096988312782163, 0.4212028959029679)); - obj->add(VectorFx::fromFloat(0.35355338454246527, 0.25, 0.35355338454246527)); - obj->add(VectorFx::fromFloat(0.28590387318196264, 0.23096988312782168, 0.28590387318196264)); - obj->add(VectorFx::fromFloat(0.22855338668174924, 0.1767766952966371, 0.22855338668174924)); - obj->add(VectorFx::fromFloat(0.19023301672802728, 0.09567085809127263, 0.19023301672802728)); - obj->add(VectorFx::fromFloat(0.1767766922712326, 9.184850993605148e-17, 0.1767766922712326)); - obj->add(VectorFx::fromFloat(0.2309698760509491, 3.061616997868383e-17, 0.09567085653543472)); - obj->add(VectorFx::fromFloat(0.24855141099175748, -0.09567085809127242, 0.10295336685995762)); - obj->add(VectorFx::fromFloat(0.2986193864964557, -0.17677669529663687, 0.12369220165273821)); - obj->add(VectorFx::fromFloat(0.37355140716178153, -0.23096988312782163, 0.15473006131458114)); - obj->add(VectorFx::fromFloat(0.46193975210189814, -0.25, 0.19134171307086942)); - obj->add(VectorFx::fromFloat(0.5503280970420148, -0.23096988312782166, 0.22795336482715772)); - obj->add(VectorFx::fromFloat(0.6252601177073406, -0.17677669529663692, 0.25899122448900064)); - obj->add(VectorFx::fromFloat(0.6753280932120389, -0.0956708580912726, 0.27973005928178124)); - obj->add(VectorFx::fromFloat(0.6929096281528473, -6.123233995736766e-17, 0.28701256960630417)); - obj->add(VectorFx::fromFloat(0.6753280932120389, 0.09567085809127249, 0.27973005928178124)); - obj->add(VectorFx::fromFloat(0.6252601177073407, 0.17677669529663684, 0.2589912244890007)); - obj->add(VectorFx::fromFloat(0.5503280970420149, 0.23096988312782163, 0.22795336482715775)); - obj->add(VectorFx::fromFloat(0.46193975210189825, 0.25, 0.19134171307086947)); - obj->add(VectorFx::fromFloat(0.3735514071617816, 0.23096988312782168, 0.1547300613145812)); - obj->add(VectorFx::fromFloat(0.2986193864964559, 0.1767766952966371, 0.12369220165273831)); - obj->add(VectorFx::fromFloat(0.24855141099175757, 0.09567085809127263, 0.10295336685995767)); - obj->add(VectorFx::fromFloat(0.2309698760509491, 9.184850993605148e-17, 0.09567085653543472)); - obj->add(VectorFx::fromFloat(0.25, 3.061616997868383e-17, 0)); - obj->add(VectorFx::fromFloat(0.26903011687217826, -0.09567085809127242, 0)); - obj->add(VectorFx::fromFloat(0.3232233047033631, -0.17677669529663687, 0)); - obj->add(VectorFx::fromFloat(0.40432914190872743, -0.23096988312782163, 0)); - obj->add(VectorFx::fromFloat(0.49999999999999994, -0.25, 0)); - obj->add(VectorFx::fromFloat(0.5956708580912725, -0.23096988312782166, 0)); - obj->add(VectorFx::fromFloat(0.6767766952966369, -0.17677669529663692, 0)); - obj->add(VectorFx::fromFloat(0.7309698831278216, -0.0956708580912726, 0)); - obj->add(VectorFx::fromFloat(0.75, -6.123233995736766e-17, 0)); - obj->add(VectorFx::fromFloat(0.7309698831278217, 0.09567085809127249, 0)); - obj->add(VectorFx::fromFloat(0.676776695296637, 0.17677669529663684, 0)); - obj->add(VectorFx::fromFloat(0.5956708580912726, 0.23096988312782163, 0)); - obj->add(VectorFx::fromFloat(0.5000000000000001, 0.25, 0)); - obj->add(VectorFx::fromFloat(0.40432914190872754, 0.23096988312782168, 0)); - obj->add(VectorFx::fromFloat(0.32322330470336336, 0.1767766952966371, 0)); - obj->add(VectorFx::fromFloat(0.26903011687217837, 0.09567085809127263, 0)); - obj->add(VectorFx::fromFloat(0.25, 9.184850993605148e-17, 0)); - obj->add(VectorFx::fromFloat(0.2309698760509491, 3.061616997868383e-17, -0.09567085653543472)); - obj->add(VectorFx::fromFloat(0.24855141099175748, -0.09567085809127242, -0.10295336685995762)); - obj->add(VectorFx::fromFloat(0.2986193864964557, -0.17677669529663687, -0.12369220165273821)); - obj->add(VectorFx::fromFloat(0.37355140716178153, -0.23096988312782163, -0.15473006131458114)); - obj->add(VectorFx::fromFloat(0.46193975210189814, -0.25, -0.19134171307086942)); - obj->add(VectorFx::fromFloat(0.5503280970420148, -0.23096988312782166, -0.22795336482715772)); - obj->add(VectorFx::fromFloat(0.6252601177073406, -0.17677669529663692, -0.25899122448900064)); - obj->add(VectorFx::fromFloat(0.6753280932120389, -0.0956708580912726, -0.27973005928178124)); - obj->add(VectorFx::fromFloat(0.6929096281528473, -6.123233995736766e-17, -0.28701256960630417)); - obj->add(VectorFx::fromFloat(0.6753280932120389, 0.09567085809127249, -0.27973005928178124)); - obj->add(VectorFx::fromFloat(0.6252601177073407, 0.17677669529663684, -0.2589912244890007)); - obj->add(VectorFx::fromFloat(0.5503280970420149, 0.23096988312782163, -0.22795336482715775)); - obj->add(VectorFx::fromFloat(0.46193975210189825, 0.25, -0.19134171307086947)); - obj->add(VectorFx::fromFloat(0.3735514071617816, 0.23096988312782168, -0.1547300613145812)); - obj->add(VectorFx::fromFloat(0.2986193864964559, 0.1767766952966371, -0.12369220165273831)); - obj->add(VectorFx::fromFloat(0.24855141099175757, 0.09567085809127263, -0.10295336685995767)); - obj->add(VectorFx::fromFloat(0.2309698760509491, 9.184850993605148e-17, -0.09567085653543472)); - obj->add(VectorFx::fromFloat(0.1767766922712326, 3.061616997868383e-17, -0.1767766922712326)); - obj->add(VectorFx::fromFloat(0.19023301672802723, -0.09567085809127242, -0.19023301672802723)); - obj->add(VectorFx::fromFloat(0.22855338668174907, -0.17677669529663687, -0.22855338668174907)); - obj->add(VectorFx::fromFloat(0.2859038731819626, -0.23096988312782163, -0.2859038731819626)); - obj->add(VectorFx::fromFloat(0.35355338454246515, -0.25, -0.35355338454246515)); - obj->add(VectorFx::fromFloat(0.4212028959029678, -0.23096988312782166, -0.4212028959029678)); - obj->add(VectorFx::fromFloat(0.4785533824031813, -0.17677669529663692, -0.4785533824031813)); - obj->add(VectorFx::fromFloat(0.5168737523569031, -0.0956708580912726, -0.5168737523569031)); - obj->add(VectorFx::fromFloat(0.5303300768136978, -6.123233995736766e-17, -0.5303300768136978)); - obj->add(VectorFx::fromFloat(0.5168737523569031, 0.09567085809127249, -0.5168737523569031)); - obj->add(VectorFx::fromFloat(0.47855338240318135, 0.17677669529663684, -0.47855338240318135)); - obj->add(VectorFx::fromFloat(0.4212028959029679, 0.23096988312782163, -0.4212028959029679)); - obj->add(VectorFx::fromFloat(0.35355338454246527, 0.25, -0.35355338454246527)); - obj->add(VectorFx::fromFloat(0.28590387318196264, 0.23096988312782168, -0.28590387318196264)); - obj->add(VectorFx::fromFloat(0.22855338668174924, 0.1767766952966371, -0.22855338668174924)); - obj->add(VectorFx::fromFloat(0.19023301672802728, 0.09567085809127263, -0.19023301672802728)); - obj->add(VectorFx::fromFloat(0.1767766922712326, 9.184850993605148e-17, -0.1767766922712326)); - obj->add(VectorFx::fromFloat(0.09567085653543472, 3.061616997868383e-17, -0.2309698760509491)); - obj->add(VectorFx::fromFloat(0.10295336685995762, -0.09567085809127242, -0.24855141099175748)); - obj->add(VectorFx::fromFloat(0.12369220165273821, -0.17677669529663687, -0.2986193864964557)); - obj->add(VectorFx::fromFloat(0.15473006131458114, -0.23096988312782163, -0.37355140716178153)); - obj->add(VectorFx::fromFloat(0.19134171307086942, -0.25, -0.46193975210189814)); - obj->add(VectorFx::fromFloat(0.22795336482715772, -0.23096988312782166, -0.5503280970420148)); - obj->add(VectorFx::fromFloat(0.25899122448900064, -0.17677669529663692, -0.6252601177073406)); - obj->add(VectorFx::fromFloat(0.27973005928178124, -0.0956708580912726, -0.6753280932120389)); - obj->add(VectorFx::fromFloat(0.28701256960630417, -6.123233995736766e-17, -0.6929096281528473)); - obj->add(VectorFx::fromFloat(0.27973005928178124, 0.09567085809127249, -0.6753280932120389)); - obj->add(VectorFx::fromFloat(0.2589912244890007, 0.17677669529663684, -0.6252601177073407)); - obj->add(VectorFx::fromFloat(0.22795336482715775, 0.23096988312782163, -0.5503280970420149)); - obj->add(VectorFx::fromFloat(0.19134171307086947, 0.25, -0.46193975210189825)); - obj->add(VectorFx::fromFloat(0.1547300613145812, 0.23096988312782168, -0.3735514071617816)); - obj->add(VectorFx::fromFloat(0.12369220165273831, 0.1767766952966371, -0.2986193864964559)); - obj->add(VectorFx::fromFloat(0.10295336685995767, 0.09567085809127263, -0.24855141099175757)); - obj->add(VectorFx::fromFloat(0.09567085653543472, 9.184850993605148e-17, -0.2309698760509491)); - obj->add(VectorFx::fromFloat(1.5308085657314598e-17, 3.061616997868383e-17, -0.25)); - obj->add(VectorFx::fromFloat(1.647334429390665e-17, -0.09567085809127242, -0.26903011687217826)); - obj->add(VectorFx::fromFloat(1.9791720139357513e-17, -0.17677669529663687, -0.3232233047033631)); - obj->add(VectorFx::fromFloat(2.4758020552349235e-17, -0.23096988312782163, -0.40432914190872743)); - obj->add(VectorFx::fromFloat(3.0616171314629196e-17, -0.25, -0.49999999999999994)); - obj->add(VectorFx::fromFloat(3.6474322076909154e-17, -0.23096988312782166, -0.5956708580912725)); - obj->add(VectorFx::fromFloat(4.1440622489900873e-17, -0.17677669529663692, -0.6767766952966369)); - obj->add(VectorFx::fromFloat(4.475899833535174e-17, -0.0956708580912726, -0.7309698831278216)); - obj->add(VectorFx::fromFloat(4.5924256971943795e-17, -6.123233995736766e-17, -0.75)); - obj->add(VectorFx::fromFloat(4.475899833535174e-17, 0.09567085809127249, -0.7309698831278217)); - obj->add(VectorFx::fromFloat(4.144062248990088e-17, 0.17677669529663684, -0.676776695296637)); - obj->add(VectorFx::fromFloat(3.647432207690916e-17, 0.23096988312782163, -0.5956708580912726)); - obj->add(VectorFx::fromFloat(3.06161713146292e-17, 0.25, -0.5000000000000001)); - obj->add(VectorFx::fromFloat(2.4758020552349244e-17, 0.23096988312782168, -0.40432914190872754)); - obj->add(VectorFx::fromFloat(1.979172013935753e-17, 0.1767766952966371, -0.32322330470336336)); - obj->add(VectorFx::fromFloat(1.6473344293906656e-17, 0.09567085809127263, -0.26903011687217837)); - obj->add(VectorFx::fromFloat(1.5308085657314598e-17, 9.184850993605148e-17, -0.25)); - obj->add(VectorFx::fromFloat(-0.09567085653543472, 3.061616997868383e-17, -0.2309698760509491)); - obj->add(VectorFx::fromFloat(-0.10295336685995762, -0.09567085809127242, -0.24855141099175748)); - obj->add(VectorFx::fromFloat(-0.12369220165273821, -0.17677669529663687, -0.2986193864964557)); - obj->add(VectorFx::fromFloat(-0.15473006131458114, -0.23096988312782163, -0.37355140716178153)); - obj->add(VectorFx::fromFloat(-0.19134171307086942, -0.25, -0.46193975210189814)); - obj->add(VectorFx::fromFloat(-0.22795336482715772, -0.23096988312782166, -0.5503280970420148)); - obj->add(VectorFx::fromFloat(-0.25899122448900064, -0.17677669529663692, -0.6252601177073406)); - obj->add(VectorFx::fromFloat(-0.27973005928178124, -0.0956708580912726, -0.6753280932120389)); - obj->add(VectorFx::fromFloat(-0.28701256960630417, -6.123233995736766e-17, -0.6929096281528473)); - obj->add(VectorFx::fromFloat(-0.27973005928178124, 0.09567085809127249, -0.6753280932120389)); - obj->add(VectorFx::fromFloat(-0.2589912244890007, 0.17677669529663684, -0.6252601177073407)); - obj->add(VectorFx::fromFloat(-0.22795336482715775, 0.23096988312782163, -0.5503280970420149)); - obj->add(VectorFx::fromFloat(-0.19134171307086947, 0.25, -0.46193975210189825)); - obj->add(VectorFx::fromFloat(-0.1547300613145812, 0.23096988312782168, -0.3735514071617816)); - obj->add(VectorFx::fromFloat(-0.12369220165273831, 0.1767766952966371, -0.2986193864964559)); - obj->add(VectorFx::fromFloat(-0.10295336685995767, 0.09567085809127263, -0.24855141099175757)); - obj->add(VectorFx::fromFloat(-0.09567085653543472, 9.184850993605148e-17, -0.2309698760509491)); - obj->add(VectorFx::fromFloat(-0.1767766922712326, 3.061616997868383e-17, -0.1767766922712326)); - obj->add(VectorFx::fromFloat(-0.19023301672802723, -0.09567085809127242, -0.19023301672802723)); - obj->add(VectorFx::fromFloat(-0.22855338668174907, -0.17677669529663687, -0.22855338668174907)); - obj->add(VectorFx::fromFloat(-0.2859038731819626, -0.23096988312782163, -0.2859038731819626)); - obj->add(VectorFx::fromFloat(-0.35355338454246515, -0.25, -0.35355338454246515)); - obj->add(VectorFx::fromFloat(-0.4212028959029678, -0.23096988312782166, -0.4212028959029678)); - obj->add(VectorFx::fromFloat(-0.4785533824031813, -0.17677669529663692, -0.4785533824031813)); - obj->add(VectorFx::fromFloat(-0.5168737523569031, -0.0956708580912726, -0.5168737523569031)); - obj->add(VectorFx::fromFloat(-0.5303300768136978, -6.123233995736766e-17, -0.5303300768136978)); - obj->add(VectorFx::fromFloat(-0.5168737523569031, 0.09567085809127249, -0.5168737523569031)); - obj->add(VectorFx::fromFloat(-0.47855338240318135, 0.17677669529663684, -0.47855338240318135)); - obj->add(VectorFx::fromFloat(-0.4212028959029679, 0.23096988312782163, -0.4212028959029679)); - obj->add(VectorFx::fromFloat(-0.35355338454246527, 0.25, -0.35355338454246527)); - obj->add(VectorFx::fromFloat(-0.28590387318196264, 0.23096988312782168, -0.28590387318196264)); - obj->add(VectorFx::fromFloat(-0.22855338668174924, 0.1767766952966371, -0.22855338668174924)); - obj->add(VectorFx::fromFloat(-0.19023301672802728, 0.09567085809127263, -0.19023301672802728)); - obj->add(VectorFx::fromFloat(-0.1767766922712326, 9.184850993605148e-17, -0.1767766922712326)); - obj->add(VectorFx::fromFloat(-0.2309698760509491, 3.061616997868383e-17, -0.09567085653543472)); - obj->add(VectorFx::fromFloat(-0.24855141099175748, -0.09567085809127242, -0.10295336685995762)); - obj->add(VectorFx::fromFloat(-0.2986193864964557, -0.17677669529663687, -0.12369220165273821)); - obj->add(VectorFx::fromFloat(-0.37355140716178153, -0.23096988312782163, -0.15473006131458114)); - obj->add(VectorFx::fromFloat(-0.46193975210189814, -0.25, -0.19134171307086942)); - obj->add(VectorFx::fromFloat(-0.5503280970420148, -0.23096988312782166, -0.22795336482715772)); - obj->add(VectorFx::fromFloat(-0.6252601177073406, -0.17677669529663692, -0.25899122448900064)); - obj->add(VectorFx::fromFloat(-0.6753280932120389, -0.0956708580912726, -0.27973005928178124)); - obj->add(VectorFx::fromFloat(-0.6929096281528473, -6.123233995736766e-17, -0.28701256960630417)); - obj->add(VectorFx::fromFloat(-0.6753280932120389, 0.09567085809127249, -0.27973005928178124)); - obj->add(VectorFx::fromFloat(-0.6252601177073407, 0.17677669529663684, -0.2589912244890007)); - obj->add(VectorFx::fromFloat(-0.5503280970420149, 0.23096988312782163, -0.22795336482715775)); - obj->add(VectorFx::fromFloat(-0.46193975210189825, 0.25, -0.19134171307086947)); - obj->add(VectorFx::fromFloat(-0.3735514071617816, 0.23096988312782168, -0.1547300613145812)); - obj->add(VectorFx::fromFloat(-0.2986193864964559, 0.1767766952966371, -0.12369220165273831)); - obj->add(VectorFx::fromFloat(-0.24855141099175757, 0.09567085809127263, -0.10295336685995767)); - obj->add(VectorFx::fromFloat(-0.2309698760509491, 9.184850993605148e-17, -0.09567085653543472)); - obj->add(VectorFx::fromFloat(-0.25, 3.061616997868383e-17, -3.0616171314629196e-17)); - obj->add(VectorFx::fromFloat(-0.26903011687217826, -0.09567085809127242, -3.29466885878133e-17)); - obj->add(VectorFx::fromFloat(-0.3232233047033631, -0.17677669529663687, -3.9583440278715026e-17)); - obj->add(VectorFx::fromFloat(-0.40432914190872743, -0.23096988312782163, -4.951604110469847e-17)); - obj->add(VectorFx::fromFloat(-0.49999999999999994, -0.25, -6.123234262925839e-17)); - obj->add(VectorFx::fromFloat(-0.5956708580912725, -0.23096988312782166, -7.294864415381831e-17)); - obj->add(VectorFx::fromFloat(-0.6767766952966369, -0.17677669529663692, -8.288124497980175e-17)); - obj->add(VectorFx::fromFloat(-0.7309698831278216, -0.0956708580912726, -8.951799667070348e-17)); - obj->add(VectorFx::fromFloat(-0.75, -6.123233995736766e-17, -9.184851394388759e-17)); - obj->add(VectorFx::fromFloat(-0.7309698831278217, 0.09567085809127249, -8.951799667070348e-17)); - obj->add(VectorFx::fromFloat(-0.676776695296637, 0.17677669529663684, -8.288124497980176e-17)); - obj->add(VectorFx::fromFloat(-0.5956708580912726, 0.23096988312782163, -7.294864415381832e-17)); - obj->add(VectorFx::fromFloat(-0.5000000000000001, 0.25, -6.12323426292584e-17)); - obj->add(VectorFx::fromFloat(-0.40432914190872754, 0.23096988312782168, -4.951604110469849e-17)); - obj->add(VectorFx::fromFloat(-0.32322330470336336, 0.1767766952966371, -3.958344027871506e-17)); - obj->add(VectorFx::fromFloat(-0.26903011687217837, 0.09567085809127263, -3.294668858781331e-17)); - obj->add(VectorFx::fromFloat(-0.25, 9.184850993605148e-17, -3.0616171314629196e-17)); - obj->add(VectorFx::fromFloat(-0.2309698760509491, 3.061616997868383e-17, 0.09567085653543472)); - obj->add(VectorFx::fromFloat(-0.24855141099175748, -0.09567085809127242, 0.10295336685995762)); - obj->add(VectorFx::fromFloat(-0.2986193864964557, -0.17677669529663687, 0.12369220165273821)); - obj->add(VectorFx::fromFloat(-0.37355140716178153, -0.23096988312782163, 0.15473006131458114)); - obj->add(VectorFx::fromFloat(-0.46193975210189814, -0.25, 0.19134171307086942)); - obj->add(VectorFx::fromFloat(-0.5503280970420148, -0.23096988312782166, 0.22795336482715772)); - obj->add(VectorFx::fromFloat(-0.6252601177073406, -0.17677669529663692, 0.25899122448900064)); - obj->add(VectorFx::fromFloat(-0.6753280932120389, -0.0956708580912726, 0.27973005928178124)); - obj->add(VectorFx::fromFloat(-0.6929096281528473, -6.123233995736766e-17, 0.28701256960630417)); - obj->add(VectorFx::fromFloat(-0.6753280932120389, 0.09567085809127249, 0.27973005928178124)); - obj->add(VectorFx::fromFloat(-0.6252601177073407, 0.17677669529663684, 0.2589912244890007)); - obj->add(VectorFx::fromFloat(-0.5503280970420149, 0.23096988312782163, 0.22795336482715775)); - obj->add(VectorFx::fromFloat(-0.46193975210189825, 0.25, 0.19134171307086947)); - obj->add(VectorFx::fromFloat(-0.3735514071617816, 0.23096988312782168, 0.1547300613145812)); - obj->add(VectorFx::fromFloat(-0.2986193864964559, 0.1767766952966371, 0.12369220165273831)); - obj->add(VectorFx::fromFloat(-0.24855141099175757, 0.09567085809127263, 0.10295336685995767)); - obj->add(VectorFx::fromFloat(-0.2309698760509491, 9.184850993605148e-17, 0.09567085653543472)); - obj->add(VectorFx::fromFloat(-0.1767766922712326, 3.061616997868383e-17, 0.1767766922712326)); - obj->add(VectorFx::fromFloat(-0.19023301672802723, -0.09567085809127242, 0.19023301672802723)); - obj->add(VectorFx::fromFloat(-0.22855338668174907, -0.17677669529663687, 0.22855338668174907)); - obj->add(VectorFx::fromFloat(-0.2859038731819626, -0.23096988312782163, 0.2859038731819626)); - obj->add(VectorFx::fromFloat(-0.35355338454246515, -0.25, 0.35355338454246515)); - obj->add(VectorFx::fromFloat(-0.4212028959029678, -0.23096988312782166, 0.4212028959029678)); - obj->add(VectorFx::fromFloat(-0.4785533824031813, -0.17677669529663692, 0.4785533824031813)); - obj->add(VectorFx::fromFloat(-0.5168737523569031, -0.0956708580912726, 0.5168737523569031)); - obj->add(VectorFx::fromFloat(-0.5303300768136978, -6.123233995736766e-17, 0.5303300768136978)); - obj->add(VectorFx::fromFloat(-0.5168737523569031, 0.09567085809127249, 0.5168737523569031)); - obj->add(VectorFx::fromFloat(-0.47855338240318135, 0.17677669529663684, 0.47855338240318135)); - obj->add(VectorFx::fromFloat(-0.4212028959029679, 0.23096988312782163, 0.4212028959029679)); - obj->add(VectorFx::fromFloat(-0.35355338454246527, 0.25, 0.35355338454246527)); - obj->add(VectorFx::fromFloat(-0.28590387318196264, 0.23096988312782168, 0.28590387318196264)); - obj->add(VectorFx::fromFloat(-0.22855338668174924, 0.1767766952966371, 0.22855338668174924)); - obj->add(VectorFx::fromFloat(-0.19023301672802728, 0.09567085809127263, 0.19023301672802728)); - obj->add(VectorFx::fromFloat(-0.1767766922712326, 9.184850993605148e-17, 0.1767766922712326)); - obj->add(VectorFx::fromFloat(-0.09567085653543472, 3.061616997868383e-17, 0.2309698760509491)); - obj->add(VectorFx::fromFloat(-0.10295336685995762, -0.09567085809127242, 0.24855141099175748)); - obj->add(VectorFx::fromFloat(-0.12369220165273821, -0.17677669529663687, 0.2986193864964557)); - obj->add(VectorFx::fromFloat(-0.15473006131458114, -0.23096988312782163, 0.37355140716178153)); - obj->add(VectorFx::fromFloat(-0.19134171307086942, -0.25, 0.46193975210189814)); - obj->add(VectorFx::fromFloat(-0.22795336482715772, -0.23096988312782166, 0.5503280970420148)); - obj->add(VectorFx::fromFloat(-0.25899122448900064, -0.17677669529663692, 0.6252601177073406)); - obj->add(VectorFx::fromFloat(-0.27973005928178124, -0.0956708580912726, 0.6753280932120389)); - obj->add(VectorFx::fromFloat(-0.28701256960630417, -6.123233995736766e-17, 0.6929096281528473)); - obj->add(VectorFx::fromFloat(-0.27973005928178124, 0.09567085809127249, 0.6753280932120389)); - obj->add(VectorFx::fromFloat(-0.2589912244890007, 0.17677669529663684, 0.6252601177073407)); - obj->add(VectorFx::fromFloat(-0.22795336482715775, 0.23096988312782163, 0.5503280970420149)); - obj->add(VectorFx::fromFloat(-0.19134171307086947, 0.25, 0.46193975210189825)); - obj->add(VectorFx::fromFloat(-0.1547300613145812, 0.23096988312782168, 0.3735514071617816)); - obj->add(VectorFx::fromFloat(-0.12369220165273831, 0.1767766952966371, 0.2986193864964559)); - obj->add(VectorFx::fromFloat(-0.10295336685995767, 0.09567085809127263, 0.24855141099175757)); - obj->add(VectorFx::fromFloat(-0.09567085653543472, 9.184850993605148e-17, 0.2309698760509491)); - obj->add(VectorFx::fromFloat(-4.5924253663221344e-17, 3.061616997868383e-17, 0.25)); - obj->add(VectorFx::fromFloat(-4.9420029321136e-17, -0.09567085809127242, 0.26903011687217826)); - obj->add(VectorFx::fromFloat(-5.937515614024773e-17, -0.17677669529663687, 0.3232233047033631)); - obj->add(VectorFx::fromFloat(-7.427405630579606e-17, -0.23096988312782163, 0.40432914190872743)); - obj->add(VectorFx::fromFloat(-9.184850732644268e-17, -0.25, 0.49999999999999994)); - obj->add(VectorFx::fromFloat(-1.0942295834708929e-16, -0.23096988312782166, 0.5956708580912725)); - obj->add(VectorFx::fromFloat(-1.2432185851263765e-16, -0.17677669529663692, 0.6767766952966369)); - obj->add(VectorFx::fromFloat(-1.3427698533174937e-16, -0.0956708580912726, 0.7309698831278216)); - obj->add(VectorFx::fromFloat(-1.3777276098966403e-16, -6.123233995736766e-17, 0.75)); - obj->add(VectorFx::fromFloat(-1.3427698533174937e-16, 0.09567085809127249, 0.7309698831278217)); - obj->add(VectorFx::fromFloat(-1.2432185851263765e-16, 0.17677669529663684, 0.676776695296637)); - obj->add(VectorFx::fromFloat(-1.0942295834708931e-16, 0.23096988312782163, 0.5956708580912726)); - obj->add(VectorFx::fromFloat(-9.18485073264427e-17, 0.25, 0.5000000000000001)); - obj->add(VectorFx::fromFloat(-7.427405630579609e-17, 0.23096988312782168, 0.40432914190872754)); - obj->add(VectorFx::fromFloat(-5.937515614024777e-17, 0.1767766952966371, 0.32322330470336336)); - obj->add(VectorFx::fromFloat(-4.942002932113602e-17, 0.09567085809127263, 0.26903011687217837)); - obj->add(VectorFx::fromFloat(-4.5924253663221344e-17, 9.184850993605148e-17, 0.25)); - obj->addFace({ 0, 1, 17}); - obj->addFace({ 1, 18, 17}); - obj->addFace({ 1, 2, 18}); - obj->addFace({ 2, 19, 18}); - obj->addFace({ 2, 3, 19}); - obj->addFace({ 3, 20, 19}); - obj->addFace({ 3, 4, 20}); - obj->addFace({ 4, 21, 20}); - obj->addFace({ 4, 5, 21}); - obj->addFace({ 5, 22, 21}); - obj->addFace({ 5, 6, 22}); - obj->addFace({ 6, 23, 22}); - obj->addFace({ 6, 7, 23}); - obj->addFace({ 7, 24, 23}); - obj->addFace({ 7, 8, 24}); - obj->addFace({ 8, 25, 24}); - obj->addFace({ 8, 9, 25}); - obj->addFace({ 9, 26, 25}); - obj->addFace({ 9, 10, 26}); - obj->addFace({ 10, 27, 26}); - obj->addFace({ 10, 11, 27}); - obj->addFace({ 11, 28, 27}); - obj->addFace({ 11, 12, 28}); - obj->addFace({ 12, 29, 28}); - obj->addFace({ 12, 13, 29}); - obj->addFace({ 13, 30, 29}); - obj->addFace({ 13, 14, 30}); - obj->addFace({ 14, 31, 30}); - obj->addFace({ 14, 15, 31}); - obj->addFace({ 15, 32, 31}); - obj->addFace({ 15, 16, 32}); - obj->addFace({ 16, 33, 32}); - obj->addFace({ 16, 0, 33}); - obj->addFace({ 0, 17, 33}); - obj->addFace({ 17, 18, 34}); - obj->addFace({ 18, 35, 34}); - obj->addFace({ 18, 19, 35}); - obj->addFace({ 19, 36, 35}); - obj->addFace({ 19, 20, 36}); - obj->addFace({ 20, 37, 36}); - obj->addFace({ 20, 21, 37}); - obj->addFace({ 21, 38, 37}); - obj->addFace({ 21, 22, 38}); - obj->addFace({ 22, 39, 38}); - obj->addFace({ 22, 23, 39}); - obj->addFace({ 23, 40, 39}); - obj->addFace({ 23, 24, 40}); - obj->addFace({ 24, 41, 40}); - obj->addFace({ 24, 25, 41}); - obj->addFace({ 25, 42, 41}); - obj->addFace({ 25, 26, 42}); - obj->addFace({ 26, 43, 42}); - obj->addFace({ 26, 27, 43}); - obj->addFace({ 27, 44, 43}); - obj->addFace({ 27, 28, 44}); - obj->addFace({ 28, 45, 44}); - obj->addFace({ 28, 29, 45}); - obj->addFace({ 29, 46, 45}); - obj->addFace({ 29, 30, 46}); - obj->addFace({ 30, 47, 46}); - obj->addFace({ 30, 31, 47}); - obj->addFace({ 31, 48, 47}); - obj->addFace({ 31, 32, 48}); - obj->addFace({ 32, 49, 48}); - obj->addFace({ 32, 33, 49}); - obj->addFace({ 33, 50, 49}); - obj->addFace({ 33, 17, 50}); - obj->addFace({ 17, 34, 50}); - obj->addFace({ 34, 35, 51}); - obj->addFace({ 35, 52, 51}); - obj->addFace({ 35, 36, 52}); - obj->addFace({ 36, 53, 52}); - obj->addFace({ 36, 37, 53}); - obj->addFace({ 37, 54, 53}); - obj->addFace({ 37, 38, 54}); - obj->addFace({ 38, 55, 54}); - obj->addFace({ 38, 39, 55}); - obj->addFace({ 39, 56, 55}); - obj->addFace({ 39, 40, 56}); - obj->addFace({ 40, 57, 56}); - obj->addFace({ 40, 41, 57}); - obj->addFace({ 41, 58, 57}); - obj->addFace({ 41, 42, 58}); - obj->addFace({ 42, 59, 58}); - obj->addFace({ 42, 43, 59}); - obj->addFace({ 43, 60, 59}); - obj->addFace({ 43, 44, 60}); - obj->addFace({ 44, 61, 60}); - obj->addFace({ 44, 45, 61}); - obj->addFace({ 45, 62, 61}); - obj->addFace({ 45, 46, 62}); - obj->addFace({ 46, 63, 62}); - obj->addFace({ 46, 47, 63}); - obj->addFace({ 47, 64, 63}); - obj->addFace({ 47, 48, 64}); - obj->addFace({ 48, 65, 64}); - obj->addFace({ 48, 49, 65}); - obj->addFace({ 49, 66, 65}); - obj->addFace({ 49, 50, 66}); - obj->addFace({ 50, 67, 66}); - obj->addFace({ 50, 34, 67}); - obj->addFace({ 34, 51, 67}); - obj->addFace({ 51, 52, 68}); - obj->addFace({ 52, 69, 68}); - obj->addFace({ 52, 53, 69}); - obj->addFace({ 53, 70, 69}); - obj->addFace({ 53, 54, 70}); - obj->addFace({ 54, 71, 70}); - obj->addFace({ 54, 55, 71}); - obj->addFace({ 55, 72, 71}); - obj->addFace({ 55, 56, 72}); - obj->addFace({ 56, 73, 72}); - obj->addFace({ 56, 57, 73}); - obj->addFace({ 57, 74, 73}); - obj->addFace({ 57, 58, 74}); - obj->addFace({ 58, 75, 74}); - obj->addFace({ 58, 59, 75}); - obj->addFace({ 59, 76, 75}); - obj->addFace({ 59, 60, 76}); - obj->addFace({ 60, 77, 76}); - obj->addFace({ 60, 61, 77}); - obj->addFace({ 61, 78, 77}); - obj->addFace({ 61, 62, 78}); - obj->addFace({ 62, 79, 78}); - obj->addFace({ 62, 63, 79}); - obj->addFace({ 63, 80, 79}); - obj->addFace({ 63, 64, 80}); - obj->addFace({ 64, 81, 80}); - obj->addFace({ 64, 65, 81}); - obj->addFace({ 65, 82, 81}); - obj->addFace({ 65, 66, 82}); - obj->addFace({ 66, 83, 82}); - obj->addFace({ 66, 67, 83}); - obj->addFace({ 67, 84, 83}); - obj->addFace({ 67, 51, 84}); - obj->addFace({ 51, 68, 84}); - obj->addFace({ 68, 69, 85}); - obj->addFace({ 69, 86, 85}); - obj->addFace({ 69, 70, 86}); - obj->addFace({ 70, 87, 86}); - obj->addFace({ 70, 71, 87}); - obj->addFace({ 71, 88, 87}); - obj->addFace({ 71, 72, 88}); - obj->addFace({ 72, 89, 88}); - obj->addFace({ 72, 73, 89}); - obj->addFace({ 73, 90, 89}); - obj->addFace({ 73, 74, 90}); - obj->addFace({ 74, 91, 90}); - obj->addFace({ 74, 75, 91}); - obj->addFace({ 75, 92, 91}); - obj->addFace({ 75, 76, 92}); - obj->addFace({ 76, 93, 92}); - obj->addFace({ 76, 77, 93}); - obj->addFace({ 77, 94, 93}); - obj->addFace({ 77, 78, 94}); - obj->addFace({ 78, 95, 94}); - obj->addFace({ 78, 79, 95}); - obj->addFace({ 79, 96, 95}); - obj->addFace({ 79, 80, 96}); - obj->addFace({ 80, 97, 96}); - obj->addFace({ 80, 81, 97}); - obj->addFace({ 81, 98, 97}); - obj->addFace({ 81, 82, 98}); - obj->addFace({ 82, 99, 98}); - obj->addFace({ 82, 83, 99}); - obj->addFace({ 83, 100, 99}); - obj->addFace({ 83, 84, 100}); - obj->addFace({ 84, 101, 100}); - obj->addFace({ 84, 68, 101}); - obj->addFace({ 68, 85, 101}); - obj->addFace({ 85, 86, 102}); - obj->addFace({ 86, 103, 102}); - obj->addFace({ 86, 87, 103}); - obj->addFace({ 87, 104, 103}); - obj->addFace({ 87, 88, 104}); - obj->addFace({ 88, 105, 104}); - obj->addFace({ 88, 89, 105}); - obj->addFace({ 89, 106, 105}); - obj->addFace({ 89, 90, 106}); - obj->addFace({ 90, 107, 106}); - obj->addFace({ 90, 91, 107}); - obj->addFace({ 91, 108, 107}); - obj->addFace({ 91, 92, 108}); - obj->addFace({ 92, 109, 108}); - obj->addFace({ 92, 93, 109}); - obj->addFace({ 93, 110, 109}); - obj->addFace({ 93, 94, 110}); - obj->addFace({ 94, 111, 110}); - obj->addFace({ 94, 95, 111}); - obj->addFace({ 95, 112, 111}); - obj->addFace({ 95, 96, 112}); - obj->addFace({ 96, 113, 112}); - obj->addFace({ 96, 97, 113}); - obj->addFace({ 97, 114, 113}); - obj->addFace({ 97, 98, 114}); - obj->addFace({ 98, 115, 114}); - obj->addFace({ 98, 99, 115}); - obj->addFace({ 99, 116, 115}); - obj->addFace({ 99, 100, 116}); - obj->addFace({ 100, 117, 116}); - obj->addFace({ 100, 101, 117}); - obj->addFace({ 101, 118, 117}); - obj->addFace({ 101, 85, 118}); - obj->addFace({ 85, 102, 118}); - obj->addFace({ 102, 103, 119}); - obj->addFace({ 103, 120, 119}); - obj->addFace({ 103, 104, 120}); - obj->addFace({ 104, 121, 120}); - obj->addFace({ 104, 105, 121}); - obj->addFace({ 105, 122, 121}); - obj->addFace({ 105, 106, 122}); - obj->addFace({ 106, 123, 122}); - obj->addFace({ 106, 107, 123}); - obj->addFace({ 107, 124, 123}); - obj->addFace({ 107, 108, 124}); - obj->addFace({ 108, 125, 124}); - obj->addFace({ 108, 109, 125}); - obj->addFace({ 109, 126, 125}); - obj->addFace({ 109, 110, 126}); - obj->addFace({ 110, 127, 126}); - obj->addFace({ 110, 111, 127}); - obj->addFace({ 111, 128, 127}); - obj->addFace({ 111, 112, 128}); - obj->addFace({ 112, 129, 128}); - obj->addFace({ 112, 113, 129}); - obj->addFace({ 113, 130, 129}); - obj->addFace({ 113, 114, 130}); - obj->addFace({ 114, 131, 130}); - obj->addFace({ 114, 115, 131}); - obj->addFace({ 115, 132, 131}); - obj->addFace({ 115, 116, 132}); - obj->addFace({ 116, 133, 132}); - obj->addFace({ 116, 117, 133}); - obj->addFace({ 117, 134, 133}); - obj->addFace({ 117, 118, 134}); - obj->addFace({ 118, 135, 134}); - obj->addFace({ 118, 102, 135}); - obj->addFace({ 102, 119, 135}); - obj->addFace({ 119, 120, 136}); - obj->addFace({ 120, 137, 136}); - obj->addFace({ 120, 121, 137}); - obj->addFace({ 121, 138, 137}); - obj->addFace({ 121, 122, 138}); - obj->addFace({ 122, 139, 138}); - obj->addFace({ 122, 123, 139}); - obj->addFace({ 123, 140, 139}); - obj->addFace({ 123, 124, 140}); - obj->addFace({ 124, 141, 140}); - obj->addFace({ 124, 125, 141}); - obj->addFace({ 125, 142, 141}); - obj->addFace({ 125, 126, 142}); - obj->addFace({ 126, 143, 142}); - obj->addFace({ 126, 127, 143}); - obj->addFace({ 127, 144, 143}); - obj->addFace({ 127, 128, 144}); - obj->addFace({ 128, 145, 144}); - obj->addFace({ 128, 129, 145}); - obj->addFace({ 129, 146, 145}); - obj->addFace({ 129, 130, 146}); - obj->addFace({ 130, 147, 146}); - obj->addFace({ 130, 131, 147}); - obj->addFace({ 131, 148, 147}); - obj->addFace({ 131, 132, 148}); - obj->addFace({ 132, 149, 148}); - obj->addFace({ 132, 133, 149}); - obj->addFace({ 133, 150, 149}); - obj->addFace({ 133, 134, 150}); - obj->addFace({ 134, 151, 150}); - obj->addFace({ 134, 135, 151}); - obj->addFace({ 135, 152, 151}); - obj->addFace({ 135, 119, 152}); - obj->addFace({ 119, 136, 152}); - obj->addFace({ 136, 137, 153}); - obj->addFace({ 137, 154, 153}); - obj->addFace({ 137, 138, 154}); - obj->addFace({ 138, 155, 154}); - obj->addFace({ 138, 139, 155}); - obj->addFace({ 139, 156, 155}); - obj->addFace({ 139, 140, 156}); - obj->addFace({ 140, 157, 156}); - obj->addFace({ 140, 141, 157}); - obj->addFace({ 141, 158, 157}); - obj->addFace({ 141, 142, 158}); - obj->addFace({ 142, 159, 158}); - obj->addFace({ 142, 143, 159}); - obj->addFace({ 143, 160, 159}); - obj->addFace({ 143, 144, 160}); - obj->addFace({ 144, 161, 160}); - obj->addFace({ 144, 145, 161}); - obj->addFace({ 145, 162, 161}); - obj->addFace({ 145, 146, 162}); - obj->addFace({ 146, 163, 162}); - obj->addFace({ 146, 147, 163}); - obj->addFace({ 147, 164, 163}); - obj->addFace({ 147, 148, 164}); - obj->addFace({ 148, 165, 164}); - obj->addFace({ 148, 149, 165}); - obj->addFace({ 149, 166, 165}); - obj->addFace({ 149, 150, 166}); - obj->addFace({ 150, 167, 166}); - obj->addFace({ 150, 151, 167}); - obj->addFace({ 151, 168, 167}); - obj->addFace({ 151, 152, 168}); - obj->addFace({ 152, 169, 168}); - obj->addFace({ 152, 136, 169}); - obj->addFace({ 136, 153, 169}); - obj->addFace({ 153, 154, 170}); - obj->addFace({ 154, 171, 170}); - obj->addFace({ 154, 155, 171}); - obj->addFace({ 155, 172, 171}); - obj->addFace({ 155, 156, 172}); - obj->addFace({ 156, 173, 172}); - obj->addFace({ 156, 157, 173}); - obj->addFace({ 157, 174, 173}); - obj->addFace({ 157, 158, 174}); - obj->addFace({ 158, 175, 174}); - obj->addFace({ 158, 159, 175}); - obj->addFace({ 159, 176, 175}); - obj->addFace({ 159, 160, 176}); - obj->addFace({ 160, 177, 176}); - obj->addFace({ 160, 161, 177}); - obj->addFace({ 161, 178, 177}); - obj->addFace({ 161, 162, 178}); - obj->addFace({ 162, 179, 178}); - obj->addFace({ 162, 163, 179}); - obj->addFace({ 163, 180, 179}); - obj->addFace({ 163, 164, 180}); - obj->addFace({ 164, 181, 180}); - obj->addFace({ 164, 165, 181}); - obj->addFace({ 165, 182, 181}); - obj->addFace({ 165, 166, 182}); - obj->addFace({ 166, 183, 182}); - obj->addFace({ 166, 167, 183}); - obj->addFace({ 167, 184, 183}); - obj->addFace({ 167, 168, 184}); - obj->addFace({ 168, 185, 184}); - obj->addFace({ 168, 169, 185}); - obj->addFace({ 169, 186, 185}); - obj->addFace({ 169, 153, 186}); - obj->addFace({ 153, 170, 186}); - obj->addFace({ 170, 171, 187}); - obj->addFace({ 171, 188, 187}); - obj->addFace({ 171, 172, 188}); - obj->addFace({ 172, 189, 188}); - obj->addFace({ 172, 173, 189}); - obj->addFace({ 173, 190, 189}); - obj->addFace({ 173, 174, 190}); - obj->addFace({ 174, 191, 190}); - obj->addFace({ 174, 175, 191}); - obj->addFace({ 175, 192, 191}); - obj->addFace({ 175, 176, 192}); - obj->addFace({ 176, 193, 192}); - obj->addFace({ 176, 177, 193}); - obj->addFace({ 177, 194, 193}); - obj->addFace({ 177, 178, 194}); - obj->addFace({ 178, 195, 194}); - obj->addFace({ 178, 179, 195}); - obj->addFace({ 179, 196, 195}); - obj->addFace({ 179, 180, 196}); - obj->addFace({ 180, 197, 196}); - obj->addFace({ 180, 181, 197}); - obj->addFace({ 181, 198, 197}); - obj->addFace({ 181, 182, 198}); - obj->addFace({ 182, 199, 198}); - obj->addFace({ 182, 183, 199}); - obj->addFace({ 183, 200, 199}); - obj->addFace({ 183, 184, 200}); - obj->addFace({ 184, 201, 200}); - obj->addFace({ 184, 185, 201}); - obj->addFace({ 185, 202, 201}); - obj->addFace({ 185, 186, 202}); - obj->addFace({ 186, 203, 202}); - obj->addFace({ 186, 170, 203}); - obj->addFace({ 170, 187, 203}); - obj->addFace({ 187, 188, 204}); - obj->addFace({ 188, 205, 204}); - obj->addFace({ 188, 189, 205}); - obj->addFace({ 189, 206, 205}); - obj->addFace({ 189, 190, 206}); - obj->addFace({ 190, 207, 206}); - obj->addFace({ 190, 191, 207}); - obj->addFace({ 191, 208, 207}); - obj->addFace({ 191, 192, 208}); - obj->addFace({ 192, 209, 208}); - obj->addFace({ 192, 193, 209}); - obj->addFace({ 193, 210, 209}); - obj->addFace({ 193, 194, 210}); - obj->addFace({ 194, 211, 210}); - obj->addFace({ 194, 195, 211}); - obj->addFace({ 195, 212, 211}); - obj->addFace({ 195, 196, 212}); - obj->addFace({ 196, 213, 212}); - obj->addFace({ 196, 197, 213}); - obj->addFace({ 197, 214, 213}); - obj->addFace({ 197, 198, 214}); - obj->addFace({ 198, 215, 214}); - obj->addFace({ 198, 199, 215}); - obj->addFace({ 199, 216, 215}); - obj->addFace({ 199, 200, 216}); - obj->addFace({ 200, 217, 216}); - obj->addFace({ 200, 201, 217}); - obj->addFace({ 201, 218, 217}); - obj->addFace({ 201, 202, 218}); - obj->addFace({ 202, 219, 218}); - obj->addFace({ 202, 203, 219}); - obj->addFace({ 203, 220, 219}); - obj->addFace({ 203, 187, 220}); - obj->addFace({ 187, 204, 220}); - obj->addFace({ 204, 205, 221}); - obj->addFace({ 205, 222, 221}); - obj->addFace({ 205, 206, 222}); - obj->addFace({ 206, 223, 222}); - obj->addFace({ 206, 207, 223}); - obj->addFace({ 207, 224, 223}); - obj->addFace({ 207, 208, 224}); - obj->addFace({ 208, 225, 224}); - obj->addFace({ 208, 209, 225}); - obj->addFace({ 209, 226, 225}); - obj->addFace({ 209, 210, 226}); - obj->addFace({ 210, 227, 226}); - obj->addFace({ 210, 211, 227}); - obj->addFace({ 211, 228, 227}); - obj->addFace({ 211, 212, 228}); - obj->addFace({ 212, 229, 228}); - obj->addFace({ 212, 213, 229}); - obj->addFace({ 213, 230, 229}); - obj->addFace({ 213, 214, 230}); - obj->addFace({ 214, 231, 230}); - obj->addFace({ 214, 215, 231}); - obj->addFace({ 215, 232, 231}); - obj->addFace({ 215, 216, 232}); - obj->addFace({ 216, 233, 232}); - obj->addFace({ 216, 217, 233}); - obj->addFace({ 217, 234, 233}); - obj->addFace({ 217, 218, 234}); - obj->addFace({ 218, 235, 234}); - obj->addFace({ 218, 219, 235}); - obj->addFace({ 219, 236, 235}); - obj->addFace({ 219, 220, 236}); - obj->addFace({ 220, 237, 236}); - obj->addFace({ 220, 204, 237}); - obj->addFace({ 204, 221, 237}); - obj->addFace({ 221, 222, 238}); - obj->addFace({ 222, 239, 238}); - obj->addFace({ 222, 223, 239}); - obj->addFace({ 223, 240, 239}); - obj->addFace({ 223, 224, 240}); - obj->addFace({ 224, 241, 240}); - obj->addFace({ 224, 225, 241}); - obj->addFace({ 225, 242, 241}); - obj->addFace({ 225, 226, 242}); - obj->addFace({ 226, 243, 242}); - obj->addFace({ 226, 227, 243}); - obj->addFace({ 227, 244, 243}); - obj->addFace({ 227, 228, 244}); - obj->addFace({ 228, 245, 244}); - obj->addFace({ 228, 229, 245}); - obj->addFace({ 229, 246, 245}); - obj->addFace({ 229, 230, 246}); - obj->addFace({ 230, 247, 246}); - obj->addFace({ 230, 231, 247}); - obj->addFace({ 231, 248, 247}); - obj->addFace({ 231, 232, 248}); - obj->addFace({ 232, 249, 248}); - obj->addFace({ 232, 233, 249}); - obj->addFace({ 233, 250, 249}); - obj->addFace({ 233, 234, 250}); - obj->addFace({ 234, 251, 250}); - obj->addFace({ 234, 235, 251}); - obj->addFace({ 235, 252, 251}); - obj->addFace({ 235, 236, 252}); - obj->addFace({ 236, 253, 252}); - obj->addFace({ 236, 237, 253}); - obj->addFace({ 237, 254, 253}); - obj->addFace({ 237, 221, 254}); - obj->addFace({ 221, 238, 254}); - obj->addFace({ 238, 239, 255}); - obj->addFace({ 239, 256, 255}); - obj->addFace({ 239, 240, 256}); - obj->addFace({ 240, 257, 256}); - obj->addFace({ 240, 241, 257}); - obj->addFace({ 241, 258, 257}); - obj->addFace({ 241, 242, 258}); - obj->addFace({ 242, 259, 258}); - obj->addFace({ 242, 243, 259}); - obj->addFace({ 243, 260, 259}); - obj->addFace({ 243, 244, 260}); - obj->addFace({ 244, 261, 260}); - obj->addFace({ 244, 245, 261}); - obj->addFace({ 245, 262, 261}); - obj->addFace({ 245, 246, 262}); - obj->addFace({ 246, 263, 262}); - obj->addFace({ 246, 247, 263}); - obj->addFace({ 247, 264, 263}); - obj->addFace({ 247, 248, 264}); - obj->addFace({ 248, 265, 264}); - obj->addFace({ 248, 249, 265}); - obj->addFace({ 249, 266, 265}); - obj->addFace({ 249, 250, 266}); - obj->addFace({ 250, 267, 266}); - obj->addFace({ 250, 251, 267}); - obj->addFace({ 251, 268, 267}); - obj->addFace({ 251, 252, 268}); - obj->addFace({ 252, 269, 268}); - obj->addFace({ 252, 253, 269}); - obj->addFace({ 253, 270, 269}); - obj->addFace({ 253, 254, 270}); - obj->addFace({ 254, 271, 270}); - obj->addFace({ 254, 238, 271}); - obj->addFace({ 238, 255, 271}); - obj->addFace({ 255, 256, 272}); - obj->addFace({ 256, 273, 272}); - obj->addFace({ 256, 257, 273}); - obj->addFace({ 257, 274, 273}); - obj->addFace({ 257, 258, 274}); - obj->addFace({ 258, 275, 274}); - obj->addFace({ 258, 259, 275}); - obj->addFace({ 259, 276, 275}); - obj->addFace({ 259, 260, 276}); - obj->addFace({ 260, 277, 276}); - obj->addFace({ 260, 261, 277}); - obj->addFace({ 261, 278, 277}); - obj->addFace({ 261, 262, 278}); - obj->addFace({ 262, 279, 278}); - obj->addFace({ 262, 263, 279}); - obj->addFace({ 263, 280, 279}); - obj->addFace({ 263, 264, 280}); - obj->addFace({ 264, 281, 280}); - obj->addFace({ 264, 265, 281}); - obj->addFace({ 265, 282, 281}); - obj->addFace({ 265, 266, 282}); - obj->addFace({ 266, 283, 282}); - obj->addFace({ 266, 267, 283}); - obj->addFace({ 267, 284, 283}); - obj->addFace({ 267, 268, 284}); - obj->addFace({ 268, 285, 284}); - obj->addFace({ 268, 269, 285}); - obj->addFace({ 269, 286, 285}); - obj->addFace({ 269, 270, 286}); - obj->addFace({ 270, 287, 286}); - obj->addFace({ 270, 271, 287}); - obj->addFace({ 271, 288, 287}); - obj->addFace({ 271, 255, 288}); - obj->addFace({ 255, 272, 288}); - obj->addFace({ 272, 273, 0}); - obj->addFace({ 273, 1, 0}); - obj->addFace({ 273, 274, 1}); - obj->addFace({ 274, 2, 1}); - obj->addFace({ 274, 275, 2}); - obj->addFace({ 275, 3, 2}); - obj->addFace({ 275, 276, 3}); - obj->addFace({ 276, 4, 3}); - obj->addFace({ 276, 277, 4}); - obj->addFace({ 277, 5, 4}); - obj->addFace({ 277, 278, 5}); - obj->addFace({ 278, 6, 5}); - obj->addFace({ 278, 279, 6}); - obj->addFace({ 279, 7, 6}); - obj->addFace({ 279, 280, 7}); - obj->addFace({ 280, 8, 7}); - obj->addFace({ 280, 281, 8}); - obj->addFace({ 281, 9, 8}); - obj->addFace({ 281, 282, 9}); - obj->addFace({ 282, 10, 9}); - obj->addFace({ 282, 283, 10}); - obj->addFace({ 283, 11, 10}); - obj->addFace({ 283, 284, 11}); - obj->addFace({ 284, 12, 11}); - obj->addFace({ 284, 285, 12}); - obj->addFace({ 285, 13, 12}); - obj->addFace({ 285, 286, 13}); - obj->addFace({ 286, 14, 13}); - obj->addFace({ 286, 287, 14}); - obj->addFace({ 287, 15, 14}); - obj->addFace({ 287, 288, 15}); - obj->addFace({ 288, 16, 15}); - obj->addFace({ 288, 272, 16}); - obj->addFace({ 272, 0, 16}); + obj->add(VectorFx::fromFloat(0, 0, 1.414214), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(1.414214, 0, 0), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 1.414214, 0), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, 1.414214), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 1.414214, 0), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(-1.414214, 0, 0), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, 1.414214), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(-1.414214, 0, 0), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, -1.414214, 0), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, 1.414214), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, -1.414214, 0), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(1.414214, 0, 0), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, 0.5773502691896258)); + obj->add(VectorFx::fromFloat(1.414214, 0, 0), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, -1.414214, 0), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, -1.414214), VectorFx::fromFloat(0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(1.414214, 0, 0), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, -1.414214), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 1.414214, 0), VectorFx::fromFloat(0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 1.414214, 0), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, -1.414214), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(-1.414214, 0, 0), VectorFx::fromFloat(-0.5773502691896258, 0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(-1.414214, 0, 0), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, 0, -1.414214), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->add(VectorFx::fromFloat(0, -1.414214, 0), VectorFx::fromFloat(-0.5773502691896258, -0.5773502691896258, -0.5773502691896258)); + obj->addFace(0, 2, 1); + obj->addFace(3, 5, 4); + obj->addFace(6, 8, 7); + obj->addFace(9, 11, 10); + obj->addFace(12, 14, 13); + obj->addFace(15, 17, 16); + obj->addFace(18, 20, 19); + obj->addFace(21, 23, 22); obj->setPosition(VectorFx::fromInt(0, 0, 0)); return obj; } diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 1bad965..3bdf445 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -23,7 +23,7 @@ add_library(${PROJECT_NAME} src/renderer/pixelrenderer.cpp src/renderer/wirerenderer.cpp src/math.cpp - src/sound_control.cpp src/scene.cpp src/timer.cpp src/vectorfx.cpp src/mesh.cpp src/renderer/raserizerrenderer.cpp) + src/sound_control.cpp src/scene.cpp src/timer.cpp src/vectorfx.cpp src/mesh.cpp src/renderer/rasterizerrenderer.cpp) target_include_directories(${PROJECT_NAME} PUBLIC $ diff --git a/engine/include/libgba-bitmap-engine/face.h b/engine/include/libgba-bitmap-engine/face.h new file mode 100644 index 0000000..9ec48f1 --- /dev/null +++ b/engine/include/libgba-bitmap-engine/face.h @@ -0,0 +1,32 @@ +// +// Created by Wouter Groeneveld on 15/07/20. +// + +#ifndef GBA_BITMAP_ENGINE_PROJECT_FACE_H +#define GBA_BITMAP_ENGINE_PROJECT_FACE_H + +#include + +class Face { +private: + int theA, theB, theC; + VectorFx norm; + +public: + Face(int newA, int newB, int newC, const Vertex& va, const Vertex& vb, const Vertex& vc) : theA(newA), theB(newB), theC(newC), norm(VectorFx()) { + normalize(va, vb, vc); + } + + inline const VectorFx& normal() const { return norm; }; + inline int a() { return theA; }; + inline int b() { return theB; }; + inline int c() { return theC; }; + + inline void normalize(const Vertex& va, const Vertex& vb, const Vertex& vc) { + norm = (va.normal() + vb.normal() + vc.normal()).scale(fxdiv(int2fx(1), int2fx(3))); + norm.normalize(); + } + +}; + +#endif //GBA_BITMAP_ENGINE_PROJECT_FACE_H diff --git a/engine/include/libgba-bitmap-engine/matrixfx.h b/engine/include/libgba-bitmap-engine/matrixfx.h index 06e82c5..f95a0be 100644 --- a/engine/include/libgba-bitmap-engine/matrixfx.h +++ b/engine/include/libgba-bitmap-engine/matrixfx.h @@ -115,6 +115,13 @@ public: return "(" + mstr(12) + "," + mstr(13) + "," + mstr(14) + "," + mstr(15) +")"; } + inline static VectorFx transformNormal(const VectorFx& vector, const MatrixFx &transformation) { + FIXED x = fxmul(vector.x(), transformation.mAt(0)) + fxmul(vector.y(), transformation.mAt(4)) + fxmul(vector.z(), transformation.mAt(8)); + FIXED y = fxmul(vector.x(), transformation.mAt(1)) + fxmul(vector.y(), transformation.mAt(5)) + fxmul(vector.z(), transformation.mAt(9)); + FIXED z = fxmul(vector.x(), transformation.mAt(2)) + fxmul(vector.y(), transformation.mAt(6)) + fxmul(vector.z(), transformation.mAt(10)); + return VectorFx(x, y, z); + } + inline static VectorFx transformCoordinates(const VectorFx &vector, const MatrixFx &transformation) { FIXED x = fxmul(vector.x(), transformation.mAt(0)) + fxmul(vector.y(), transformation.mAt(4)) + fxmul(vector.z(), transformation.mAt(8)) + transformation.mAt(12); FIXED y = fxmul(vector.x(), transformation.mAt(1)) + fxmul(vector.y(), transformation.mAt(5)) + fxmul(vector.z(), transformation.mAt(9)) + transformation.mAt(13); diff --git a/engine/include/libgba-bitmap-engine/mesh.h b/engine/include/libgba-bitmap-engine/mesh.h index 96d9f69..eb7bb79 100644 --- a/engine/include/libgba-bitmap-engine/mesh.h +++ b/engine/include/libgba-bitmap-engine/mesh.h @@ -5,34 +5,32 @@ #ifndef GBA_BITMAP_ENGINE_PROJECT_MESH_H #define GBA_BITMAP_ENGINE_PROJECT_MESH_H -#include "vectorfx.h" +#include +#include +#include #include #include -typedef struct { - int a; - int b; - int c; -} Face; - class Mesh { private: VectorFx pos; VectorFx rot; u8 cIndex; - std::vector> verticesArr; - std::vector facesArr; + std::vector> verticesArr; + std::vector> facesArr; public: + void add(VectorFx coords, VectorFx normal); void add(VectorFx v); - void addFace(Face f); - inline std::vector> const& vertices() const { + void addFace(int a, int b, int c); + + inline std::vector> const& vertices() const { return verticesArr; } - inline std::vector const& faces() const { + inline std::vector> const& faces() const { return facesArr; } diff --git a/engine/include/libgba-bitmap-engine/renderer/renderer.h b/engine/include/libgba-bitmap-engine/renderer/renderer.h index f21e414..0a189db 100644 --- a/engine/include/libgba-bitmap-engine/renderer/renderer.h +++ b/engine/include/libgba-bitmap-engine/renderer/renderer.h @@ -15,26 +15,27 @@ protected: std::shared_ptr engine; public: - virtual void render(const MatrixFx &transformationMatrix, const Mesh* mesh) = 0; + virtual void render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) = 0; }; class PixelRenderer : public Renderer { public: - void render(const MatrixFx &transformationMatrix, const Mesh* mesh) override; + void render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) override; }; class WiredRenderer : public Renderer { public: - void render(const MatrixFx &transformationMatrix, const Mesh* mesh) override; + void render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) override; }; class RasterizerRenderer : public Renderer { private: void plotTriangle(const VectorFx& p1, const VectorFx& p2, const VectorFx& p3, COLOR color); void processScanLine(FIXED y, const VectorFx& pa, const VectorFx& pb, const VectorFx& pc, const VectorFx& pd, COLOR color); + bool backFaceCull(const Face* face, const MatrixFx& worldView); public: - void render(const MatrixFx &transformationMatrix, const Mesh* mesh) override; + void render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) override; }; #endif //GBA_BITMAP_ENGINE_PROJECT_RENDERER_H diff --git a/engine/include/libgba-bitmap-engine/vertex.h b/engine/include/libgba-bitmap-engine/vertex.h index a42c34b..f18f35f 100644 --- a/engine/include/libgba-bitmap-engine/vertex.h +++ b/engine/include/libgba-bitmap-engine/vertex.h @@ -5,11 +5,20 @@ #ifndef GBA_BITMAP_ENGINE_PROJECT_VERTEX_H #define GBA_BITMAP_ENGINE_PROJECT_VERTEX_H -#include +#include class Vertex { private: - VectorFx coords; + VectorFx coordinates; + VectorFx norm; + // texture coords here + +public: + Vertex(const VectorFx& coord) : coordinates(coord), norm(VectorFx()) {} + Vertex(const VectorFx& coord, const VectorFx& theNorm) : coordinates(coord), norm(theNorm) {} + + inline const VectorFx& coords() const { return coordinates; } + inline const VectorFx& normal() const { return norm; } }; #endif //GBA_BITMAP_ENGINE_PROJECT_VERTEX_H diff --git a/engine/src/mesh.cpp b/engine/src/mesh.cpp index cb8e9cc..4616dd0 100644 --- a/engine/src/mesh.cpp +++ b/engine/src/mesh.cpp @@ -7,9 +7,17 @@ void Mesh::add(VectorFx v) { - verticesArr.push_back(std::unique_ptr(new VectorFx(v))); + verticesArr.push_back(std::unique_ptr(new Vertex(v))); } -void Mesh::addFace(Face f) { - facesArr.push_back(f); +void Mesh::add(VectorFx coords, VectorFx normal) { + verticesArr.push_back(std::unique_ptr(new Vertex(coords, normal))); +} + +void Mesh::addFace(int a, int b, int c) { + auto &vertexA = verticesArr[a]; + auto &vertexB = verticesArr[b]; + auto &vertexC = verticesArr[c]; + + facesArr.push_back(std::unique_ptr(new Face(a, b, c, *vertexA, *vertexB, *vertexC))); } diff --git a/engine/src/renderer/gba_engine.cpp b/engine/src/renderer/gba_engine.cpp index 80692d7..ebe978b 100644 --- a/engine/src/renderer/gba_engine.cpp +++ b/engine/src/renderer/gba_engine.cpp @@ -187,15 +187,17 @@ VectorFx GBAEngine::project(const VectorFx &coord, const MatrixFx &transMat) { return VectorFx(x, y, point.z()); } -// does the mesh rendering - to write mem before flipping void GBAEngine::render() { + // I tried optimizing this; without camera changes it does not need to be recalculated each time + // However, 0 FPS difference... Most performance issues are inside mesh render() auto viewMatrix = MatrixFx::lookAtLH(currentCamera.getPosition(), currentCamera.getTarget(), VectorFx::up()); for(auto& mesh :currentScene->meshes()) { auto worldMatrix = MatrixFx::rotationYawPitchRoll(mesh->roty(), mesh->rotx(), mesh->rotz()) * MatrixFx::translation(mesh->position()); - auto transformMatrix = worldMatrix * viewMatrix * projectionMatrix; + auto worldView = worldMatrix * viewMatrix; + auto transformMatrix = worldView * projectionMatrix; - renderer->render(transformMatrix, mesh); + renderer->render(transformMatrix, worldView, mesh); } } diff --git a/engine/src/renderer/pixelrenderer.cpp b/engine/src/renderer/pixelrenderer.cpp index 181a48d..10b7ecc 100644 --- a/engine/src/renderer/pixelrenderer.cpp +++ b/engine/src/renderer/pixelrenderer.cpp @@ -5,9 +5,10 @@ #include #include -void PixelRenderer::render(const MatrixFx &transformationMatrix, const Mesh* mesh) { +void PixelRenderer::render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) { for (auto &vertex : mesh->vertices()) { - auto projectedPoint = engine->project(*vertex.get(), transformationMatrix); + auto coords = vertex.get()->coords(); + auto projectedPoint = engine->project(coords, transformationMatrix); engine->plotPixel(projectedPoint, mesh->colorIndex()); } } diff --git a/engine/src/renderer/raserizerrenderer.cpp b/engine/src/renderer/rasterizerrenderer.cpp similarity index 69% rename from engine/src/renderer/raserizerrenderer.cpp rename to engine/src/renderer/rasterizerrenderer.cpp index 201a313..8730400 100644 --- a/engine/src/renderer/raserizerrenderer.cpp +++ b/engine/src/renderer/rasterizerrenderer.cpp @@ -64,21 +64,28 @@ void RasterizerRenderer::plotTriangle(const VectorFx& pt1, const VectorFx& pt2, } } -void RasterizerRenderer::render(const MatrixFx &transformationMatrix, const Mesh *mesh) { +bool RasterizerRenderer::backFaceCull(const Face *face, const MatrixFx &worldView) { + auto transformedNormal = MatrixFx::transformNormal(face->normal(), worldView); + return transformedNormal.z() < 0; +} + +void RasterizerRenderer::render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh *mesh) { bool colorSwitch = false; int i = 0; for (auto &face : mesh->faces()) { - auto &vertexA = mesh->vertices()[face.a]; - auto &vertexB = mesh->vertices()[face.b]; - auto &vertexC = mesh->vertices()[face.c]; + if(backFaceCull(face.get(), worldView)) { + auto &vertexA = mesh->vertices()[face->a()]; + auto &vertexB = mesh->vertices()[face->b()]; + auto &vertexC = mesh->vertices()[face->c()]; - auto pixelA = engine->project(*vertexA.get(), transformationMatrix); - auto pixelB = engine->project(*vertexB.get(), transformationMatrix); - auto pixelC = engine->project(*vertexC.get(), transformationMatrix); + auto pixelA = engine->project(vertexA.get()->coords(), transformationMatrix); + auto pixelB = engine->project(vertexB.get()->coords(), transformationMatrix); + auto pixelC = engine->project(vertexC.get()->coords(), transformationMatrix); - COLOR cI = ONE + fxmul(fxdiv(int2fx(i), int2fx(mesh->faces().size())), int2fx(250)); - plotTriangle(pixelA, pixelB, pixelC, fx2int(cI)); - colorSwitch = !colorSwitch; - i++; + COLOR cI = ONE + fxmul(fxdiv(int2fx(i), int2fx(mesh->faces().size())), int2fx(250)); + plotTriangle(pixelA, pixelB, pixelC, fx2int(cI)); + colorSwitch = !colorSwitch; + i++; + } } } \ No newline at end of file diff --git a/engine/src/renderer/wirerenderer.cpp b/engine/src/renderer/wirerenderer.cpp index 893708a..0587a8a 100644 --- a/engine/src/renderer/wirerenderer.cpp +++ b/engine/src/renderer/wirerenderer.cpp @@ -5,15 +5,15 @@ #include #include -void WiredRenderer::render(const MatrixFx &transformationMatrix, const Mesh* mesh) { +void WiredRenderer::render(const MatrixFx &transformationMatrix, const MatrixFx &worldView, const Mesh* mesh) { for (auto &face : mesh->faces()) { - auto &vertexA = mesh->vertices()[face.a]; - auto &vertexB = mesh->vertices()[face.b]; - auto &vertexC = mesh->vertices()[face.c]; + auto &vertexA = mesh->vertices()[face->a()]; + auto &vertexB = mesh->vertices()[face->b()]; + auto &vertexC = mesh->vertices()[face->c()]; - auto pixelA = engine->project(*vertexA.get(), transformationMatrix); - auto pixelB = engine->project(*vertexB.get(), transformationMatrix); - auto pixelC = engine->project(*vertexC.get(), transformationMatrix); + auto pixelA = engine->project(vertexA.get()->coords(), transformationMatrix); + auto pixelB = engine->project(vertexB.get()->coords(), transformationMatrix); + auto pixelC = engine->project(vertexC.get()->coords(), transformationMatrix); engine->plotLine(pixelA, pixelB, mesh->colorIndex()); engine->plotLine(pixelB, pixelC, mesh->colorIndex()); diff --git a/img/octa.gif b/img/octa.gif new file mode 100644 index 0000000000000000000000000000000000000000..b77f0551e2c596c478c6bee3cc4fb7a29b656875 GIT binary patch literal 127710 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 literal 0 HcmV?d00001