Ejemplo n.º 1
0
// ------------------------------------------------------------------------------------------------
// 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);
}
Ejemplo n.º 2
0
// ------------------------------------------------------------------------------------------------
// 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);
}