MCPcopy Create free account
hub / github.com/WolfireGames/overgrowth / FinalizeStaticEntries

Method FinalizeStaticEntries

Source/Physics/bulletworld.cpp:2015–2065  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2013}
2014
2015void BulletWorld::FinalizeStaticEntries() {
2016 // Create meta model of all models combined
2017 vert_indices.clear();
2018 vertices.clear();
2019 for (auto &static_entrie : static_entries) {
2020 Model &model = Models::Instance()->GetModel(static_entrie.model_id);
2021 mat4 &transform = static_entrie.transform;
2022 // int start_vert_indices = vert_indices.size();
2023 int start_vertices = vertices.size() / 3;
2024 for (int j = 0, len = model.vertices.size(); j < len; j += 3) {
2025 vec3 vec(model.vertices[j + 0], model.vertices[j + 1], model.vertices[j + 2]);
2026 vec = transform * vec;
2027 vertices.push_back(vec[0]);
2028 vertices.push_back(vec[1]);
2029 vertices.push_back(vec[2]);
2030 }
2031 for (unsigned int face : model.faces) {
2032 vert_indices.push_back(face + start_vertices);
2033 }
2034 }
2035 // Create physics object
2036 SharedShapePtr shape;
2037 ShapeDisposalData *sdd = NULL;
2038 sdd = new ShapeDisposalData();
2039 btBvhTriangleMeshShape *new_shape;
2040 {
2041 int index_stride = 3 * sizeof(int);
2042 int vertex_stride = 3 * sizeof(GLfloat);
2043 std::vector<int> &faces = sdd->faces;
2044 faces.resize(vert_indices.size());
2045 for (unsigned i = 0; i < faces.size(); i++) {
2046 faces[i] = vert_indices[i];
2047 }
2048 sdd->index_vert_array = new btTriangleIndexVertexArray(vert_indices.size() / 3,
2049 &vert_indices[0],
2050 index_stride,
2051 vertices.size() / 3,
2052 (btScalar *)&vertices[0],
2053 vertex_stride);
2054 new_shape = new btBvhTriangleMeshShape(sdd->index_vert_array, true);
2055 sdd->triangle_info_map = new btTriangleInfoMap();
2056 btGenerateInternalEdgeInfo(new_shape, sdd->triangle_info_map);
2057 }
2058 shape.reset(new_shape);
2059 BulletObject *obj = CreateRigidBody(shape, 0.0f, BW_NO_FLAGS);
2060 if (sdd) {
2061 obj->shape_disposal_data.reset(sdd);
2062 }
2063 obj->body->setCollisionFlags(obj->body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK);
2064 merged_obj = obj;
2065}

Callers

nothing calls this directly

Calls 7

clearMethod · 0.45
GetModelMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
resizeMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected