f32 GetHeight(IMesh* Mesh) { f32 HighestPoint; f32 LowestPoint; for (u32 i = 0; i < Mesh->getMeshBufferCount(); i++) { u32 j; S3DVertex* VertStart; S3DVertexTangents* VertTStart; S3DVertex2TCoords* Vert2TStart; switch (Mesh->getMeshBuffer(i)->getVertexType()) { case EVT_STANDARD: { VertStart = (S3DVertex*)Mesh->getMeshBuffer(i)->getVertices(); for (j = 0; j < Mesh->getMeshBuffer(i)->getVertexCount(); j++) { if (VertStart[j].Pos.Y > HighestPoint) { HighestPoint = VertStart[j].Pos.Y; } if (VertStart[j].Pos.Y < LowestPoint) { LowestPoint = VertStart[j].Pos.Y; } } break; } case EVT_2TCOORDS: { VertTStart = (S3DVertexTangents*)Mesh->getMeshBuffer(i)->getVertices(); for (j = 0; j < Mesh->getMeshBuffer(i)->getVertexCount(); j++) { if (VertStart[j].Pos.Y > HighestPoint) { HighestPoint = VertStart[j].Pos.Y; } if (VertStart[j].Pos.Y < LowestPoint) { LowestPoint = VertStart[j].Pos.Y; } } break; } case EVT_TANGENTS: { Vert2TStart = (S3DVertex2TCoords*)Mesh->getMeshBuffer(i)->getVertices(); for (j = 0; j < Mesh->getMeshBuffer(i)->getVertexCount(); j++) { if (VertStart[j].Pos.Y > HighestPoint) { HighestPoint = VertStart[j].Pos.Y; } if (VertStart[j].Pos.Y < LowestPoint) { LowestPoint = VertStart[j].Pos.Y; } } break; } } } return HighestPoint - LowestPoint; }