From eacad4895f92a18f17be59cb484d3db0ce31e946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 26 Feb 2012 15:13:34 +0100 Subject: [PATCH] Added normals array to Icosphere primitive. --- src/Primitives/Icosphere.cpp | 30 ++++++++++++++++-------------- src/Primitives/Icosphere.h | 7 ++++--- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/Primitives/Icosphere.cpp b/src/Primitives/Icosphere.cpp index e78c973c9..99a00cec2 100644 --- a/src/Primitives/Icosphere.cpp +++ b/src/Primitives/Icosphere.cpp @@ -40,19 +40,21 @@ Icosphere<0>::Icosphere(): MeshData(Mesh::Primitive::Triangles, new vector{ - Vector4(0, -0.525731f, 0.850651f), - Vector4(0.850651f, 0, 0.525731f), - Vector4(0.850651f, 0, -0.525731f), - Vector4(-0.850651f, 0, -0.525731f), - Vector4(-0.850651f, 0, 0.525731f), - Vector4(-0.525731f, 0.850651f, 0), - Vector4(0.525731f, 0.850651f, 0), - Vector4(0.525731f, -0.850651f, 0), - Vector4(-0.525731f, -0.850651f, 0), - Vector4(0, -0.525731f, -0.850651f), - Vector4(0, 0.525731f, -0.850651f), - Vector4(0, 0.525731f, 0.850651f) -}}, {nullptr}, {nullptr}) {} +}, {new vector}, {new vector{ + Vector3(0, -0.525731f, 0.850651f), + Vector3(0.850651f, 0, 0.525731f), + Vector3(0.850651f, 0, -0.525731f), + Vector3(-0.850651f, 0, -0.525731f), + Vector3(-0.850651f, 0, 0.525731f), + Vector3(-0.525731f, 0.850651f, 0), + Vector3(0.525731f, 0.850651f, 0), + Vector3(0.525731f, -0.850651f, 0), + Vector3(-0.525731f, -0.850651f, 0), + Vector3(0, -0.525731f, -0.850651f), + Vector3(0, 0.525731f, -0.850651f), + Vector3(0, 0.525731f, 0.850651f) +}}, {nullptr}) { + vertices(0)->assign(normals(0)->begin(), normals(0)->end()); +} }} diff --git a/src/Primitives/Icosphere.h b/src/Primitives/Icosphere.h index 52d31b1c7..fc307051f 100644 --- a/src/Primitives/Icosphere.h +++ b/src/Primitives/Icosphere.h @@ -48,11 +48,12 @@ template class Icosphere: public Icosphere<0> { /** @brief Constructor */ Icosphere() { for(size_t i = 0; i != subdivisions; ++i) - MeshTools::subdivide(*indices(), *vertices(0), [](const Vector4& a, const Vector4& b) { - return (a+b).xyz().normalized(); + MeshTools::subdivide(*indices(), *normals(0), [](const Vector3& a, const Vector3& b) { + return (a+b).normalized(); }); - MeshTools::clean(*indices(), *vertices(0)); + MeshTools::clean(*indices(), *normals(0)); + vertices(0)->assign(normals(0)->begin(), normals(0)->end()); } };