void Mesh::calculateBoundingBox (BoundingBox& bbox) { int numVertices = getNumVertices(); if (numVertices == 0) gdx_log_error("gdx","No vertices defined"); float_buffer verts = vertices->getBuffer(); bbox.inf(); VertexAttribute& posAttrib = *getVertexAttribute(VertexAttributes::Usage::Position); int offset = posAttrib.offset / 4; int vertexSize = vertices->getAttributes().vertexSize / 4; int idx = offset; switch (posAttrib.numComponents) { case 1: for (int i = 0; i < numVertices; i++) { bbox.ext(verts.get(idx), 0, 0); idx += vertexSize; } break; case 2: for (int i = 0; i < numVertices; i++) { bbox.ext(verts.get(idx), verts.get(idx + 1), 0); idx += vertexSize; } break; case 3: for (int i = 0; i < numVertices; i++) { bbox.ext(verts.get(idx), verts.get(idx + 1), verts.get(idx + 2)); idx += vertexSize; } break; } }
void StillModel::getBoundingBox ( BoundingBox& bbox ) { bbox.inf(); for ( size_t i = 0; i < subMeshes.size(); i++ ) { subMeshes[i]->mesh->calculateBoundingBox ( tmpbox ); bbox.ext ( tmpbox ); } }
void Mesh::calculateBoundingBox(BoundingBox& bbox) { int numVertices = getNumVertices(); if (numVertices == 0) throw GdxRuntimeException("No vertices defined"); float* verts = m_vertices->getBuffer(); bbox.inf(); VertexAttribute posAttrib; getVertexAttribute(VertexAttributes::Position, posAttrib); int offset = posAttrib.offset / 4; int vertexSize = m_vertices->getAttributes().vertexSize() / 4; int idx = offset; switch (posAttrib.numComponents) { case 1: for (int i = 0; i < numVertices; i++) { bbox.ext(verts[idx], 0, 0); idx += vertexSize; } break; case 2: for (int i = 0; i < numVertices; i++) { bbox.ext(verts[idx], verts[idx + 1], 0); idx += vertexSize; } break; case 3: for (int i = 0; i < numVertices; i++) { bbox.ext(verts[idx], verts[idx + 1], verts[idx + 2]); idx += vertexSize; } break; } }