Skip to content

Commit d29fbe9

Browse files
committed
Added load collision hull mesh
1 parent e985399 commit d29fbe9

File tree

5 files changed

+31
-18
lines changed

5 files changed

+31
-18
lines changed

dependencies/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ add_subdirectory(stb)
7373

7474
# set libraries list
7575
set(IGNEOUS_LIBRARIES
76-
assimp
7776
bgfx
7877
BulletDynamics
7978
BulletCollision
@@ -93,8 +92,6 @@ CACHE INTERNAL "")
9392

9493
# set includes list
9594
set(IGNEOUS_INCLUDES
96-
${CMAKE_CURRENT_SOURCE_DIR}/assimp/include
97-
${CMAKE_CURRENT_BINARY_DIR}/assimp/include
9895
${CMAKE_CURRENT_SOURCE_DIR}/bullet/src
9996
${OPENAL_INCLUDE_DIR}
10097
${RAKNET_INCLUDE_DIRS}

igneous/src/core/igneous.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "igneous/igneous.hpp"
22

3-
#include <assimp/version.h>
43
#include <btBulletDynamicsCommon.h>
54
#include <bx/string.h>
65
#include <entt/entt.hpp>
@@ -36,7 +35,6 @@ int Application::run(int argc, char** argv, bgfx::Init init)
3635

3736
IG_CORE_INFO("-----Version Info-----");
3837
IG_CORE_INFO("Igneous Version: {}", IGNEOUS_VERSION);
39-
IG_CORE_INFO("Assimp Version: {}.{}.{}", aiGetVersionMajor(), aiGetVersionMinor(), aiGetVersionRevision());
4038
IG_CORE_INFO("Bullet Version: {}", BT_BULLET_VERSION);
4139
IG_CORE_INFO("Dear ImGui Version: {}", IMGUI_VERSION);
4240
IG_CORE_INFO("EnTT Version: {}", ENTT_VERSION);

igneous/src/physics/physics.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
#include "igneous/physics/physics.hpp"
22

3+
#include <fstream>
4+
35
#include <glm/gtc/type_ptr.hpp>
46

57
#include "igneous/core/log.hpp"
68
#include "igneous/ecs/ecs.hpp"
79
#include "igneous/ecs/components/transformationComponent.hpp"
810
#include "debugRenderer.hpp"
11+
#include "igneous/core/debug.hpp"
912

1013
namespace igneous {
1114
namespace physics
@@ -50,8 +53,33 @@ namespace physics
5053

5154
RigidBodyHandle loadRigidBody(std::string path)
5255
{
56+
std::ifstream file(path, std::ios::in | std::ios::binary);
57+
if (file.fail())
58+
{
59+
IG_CORE_CRITICAL("Could not open model file: {}", path);
60+
}
61+
62+
uint64_t collisionOffset;
63+
file.read((char*)&collisionOffset, sizeof(uint64_t));
64+
file.seekg(collisionOffset, std::ios::beg);
65+
66+
unsigned int numVerticies;
67+
file.read((char*)&numVerticies, sizeof(unsigned int));
68+
unsigned int verticiesSize = numVerticies * 3 * sizeof(float);
69+
70+
void* vertexData = malloc(verticiesSize);
71+
file.read((char*)vertexData, verticiesSize);
72+
file.close();
73+
74+
btConvexHullShape* shape = new btConvexHullShape((btScalar*)vertexData, numVerticies, 3 * sizeof(float));
75+
free(vertexData);
76+
77+
shape->optimizeConvexHull();
78+
#if IG_DEBUG
79+
shape->initializePolyhedralFeatures();
80+
#endif
81+
5382
btScalar mass = 10.0f;
54-
btCollisionShape* shape = &sphere;
5583
btTransform transform = identityTransform;
5684

5785
assert((!shape || shape->getShapeType() != INVALID_SHAPE_PROXYTYPE));

igneous/src/renderer/renderer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ namespace renderer
357357
meshes.push_back(mesh);
358358
}
359359

360+
file.close();
361+
360362
Model* model = new Model;
361363
model->meshes = meshes;
362364
model->program = program;

tools/modelc/modelc.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -254,25 +254,13 @@ int main(int argc, char** argv)
254254
unsigned int numIndicies = mesh->mNumFaces * 3;
255255
std::cout << "Collision Mesh vertex count: " << mesh->mNumVertices << "\n";
256256
outputFile.write((char*)&mesh->mNumVertices, sizeof(unsigned int));
257-
std::cout << "Collision Mesh index count: " << numIndicies << "\n";
258-
outputFile.write((char*)&numIndicies, sizeof(unsigned int));
259257

260258
for (unsigned int i = 0; i < mesh->mNumVertices; i++)
261259
{
262260
outputFile.write((char*)&mesh->mVertices[i].x, sizeof(float));
263261
outputFile.write((char*)&mesh->mVertices[i].y, sizeof(float));
264262
outputFile.write((char*)&mesh->mVertices[i].z, sizeof(float));
265263
}
266-
267-
for (unsigned int i = 0; i < mesh->mNumFaces; i++)
268-
{
269-
aiFace face = mesh->mFaces[i];
270-
for (unsigned int j = 0; j < face.mNumIndices; j++)
271-
{
272-
uint16_t index = face.mIndices[j];
273-
outputFile.write((char*)&index, sizeof(uint16_t));
274-
}
275-
}
276264
}
277265

278266
outputFile.close();

0 commit comments

Comments
 (0)