// ------------------------------------------------------------------------------------------------ // Build a dodecahedron with points.magnitude == 1 unsigned int StandardShapes::MakeDodecahedron(std::vector<aiVector3D>& positions, bool polygons /*= false*/) { positions.reserve(positions.size()+108); const float a = 1.f / 1.7320508f; const float b = math::sqrt((3.f-2.23606797f)/6.f); const float c = math::sqrt((3.f+2.23606797f)/6.f); const aiVector3D v0 = aiVector3D(a,a,a); const aiVector3D v1 = aiVector3D(a,a,-a); const aiVector3D v2 = aiVector3D(a,-a,a); const aiVector3D v3 = aiVector3D(a,-a,-a); const aiVector3D v4 = aiVector3D(-a,a,a); const aiVector3D v5 = aiVector3D(-a,a,-a); const aiVector3D v6 = aiVector3D(-a,-a,a); const aiVector3D v7 = aiVector3D(-a,-a,-a); const aiVector3D v8 = aiVector3D(b,c,0.f); const aiVector3D v9 = aiVector3D(-b,c,0.f); const aiVector3D v10 = aiVector3D(b,-c,0.f); const aiVector3D v11 = aiVector3D(-b,-c,0.f); const aiVector3D v12 = aiVector3D(c, 0.f, b); const aiVector3D v13 = aiVector3D(c, 0.f, -b); const aiVector3D v14 = aiVector3D(-c, 0.f, b); const aiVector3D v15 = aiVector3D(-c, 0.f, -b); const aiVector3D v16 = aiVector3D(0.f, b, c); const aiVector3D v17 = aiVector3D(0.f, -b, c); const aiVector3D v18 = aiVector3D(0.f, b, -c); const aiVector3D v19 = aiVector3D(0.f, -b, -c); ADD_PENTAGON(v0, v8, v9, v4, v16); ADD_PENTAGON(v0, v12, v13, v1, v8); ADD_PENTAGON(v0, v16, v17, v2, v12); ADD_PENTAGON(v8, v1, v18, v5, v9); ADD_PENTAGON(v12, v2, v10, v3, v13); ADD_PENTAGON(v16, v4, v14, v6, v17); ADD_PENTAGON(v9, v5, v15, v14, v4); ADD_PENTAGON(v6, v11, v10, v2, v17); ADD_PENTAGON(v3, v19, v18, v1, v13); ADD_PENTAGON(v7, v15, v5, v18, v19); ADD_PENTAGON(v7, v11, v6, v14, v15); ADD_PENTAGON(v7, v19, v3, v10, v11); return (polygons ? 5 : 3); }
// ------------------------------------------------------------------------------------------------ // Build a dodecahedron with points.magnitude == 1 unsigned int StandardShapes::MakeDodecahedron(std::vector<aiVector3D>& positions, bool polygons /*= false*/) { positions.reserve(positions.size()+108); const ai_real a = ai_real( 1.0 ) / ai_real(1.7320508); const ai_real b = std::sqrt(( ai_real( 3.0 )- ai_real( 2.23606797))/ ai_real( 6.0) ); const ai_real c = std::sqrt(( ai_real( 3.0 )+ ai_real( 2.23606797f))/ ai_real( 6.0) ); const aiVector3D v0 = aiVector3D(a,a,a); const aiVector3D v1 = aiVector3D(a,a,-a); const aiVector3D v2 = aiVector3D(a,-a,a); const aiVector3D v3 = aiVector3D(a,-a,-a); const aiVector3D v4 = aiVector3D(-a,a,a); const aiVector3D v5 = aiVector3D(-a,a,-a); const aiVector3D v6 = aiVector3D(-a,-a,a); const aiVector3D v7 = aiVector3D(-a,-a,-a); const aiVector3D v8 = aiVector3D(b,c,0.0); const aiVector3D v9 = aiVector3D(-b,c,0.0); const aiVector3D v10 = aiVector3D(b,-c,0.0); const aiVector3D v11 = aiVector3D(-b,-c,0.0); const aiVector3D v12 = aiVector3D(c, 0.0, b); const aiVector3D v13 = aiVector3D(c, 0.0, -b); const aiVector3D v14 = aiVector3D(-c, 0.0, b); const aiVector3D v15 = aiVector3D(-c, 0.0, -b); const aiVector3D v16 = aiVector3D(0.0, b, c); const aiVector3D v17 = aiVector3D(0.0, -b, c); const aiVector3D v18 = aiVector3D(0.0, b, -c); const aiVector3D v19 = aiVector3D(0.0, -b, -c); ADD_PENTAGON(v0, v8, v9, v4, v16); ADD_PENTAGON(v0, v12, v13, v1, v8); ADD_PENTAGON(v0, v16, v17, v2, v12); ADD_PENTAGON(v8, v1, v18, v5, v9); ADD_PENTAGON(v12, v2, v10, v3, v13); ADD_PENTAGON(v16, v4, v14, v6, v17); ADD_PENTAGON(v9, v5, v15, v14, v4); ADD_PENTAGON(v6, v11, v10, v2, v17); ADD_PENTAGON(v3, v19, v18, v1, v13); ADD_PENTAGON(v7, v15, v5, v18, v19); ADD_PENTAGON(v7, v11, v6, v14, v15); ADD_PENTAGON(v7, v19, v3, v10, v11); return (polygons ? 5 : 3); }