Added SHPrimitiveGenerator
This commit is contained in:
parent
28a5f8e4e5
commit
41daaaba9c
|
@ -0,0 +1,36 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHPrimitiveGenerator.h
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 18, 2022
|
||||||
|
\brief Contains the static class definition of SHPrimitiveGenerator.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// STL Includes
|
||||||
|
#include <vector>
|
||||||
|
// Project Includes
|
||||||
|
#include "Math/SHMath.h"
|
||||||
|
#include "Graphics/MiddleEnd/Interface/SHMeshLibrary.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*************************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Static class that contains functions for generating 3D primitives.
|
||||||
|
*/
|
||||||
|
/*************************************************************************************/
|
||||||
|
struct SHMeshData
|
||||||
|
{
|
||||||
|
std::vector<SHMesh::VertexPosition> VertexPositions;
|
||||||
|
std::vector<SHMesh::VertexTexCoord> VertexTexCoords;
|
||||||
|
std::vector<SHMesh::VertexTangent> VertexTangents;
|
||||||
|
std::vector<SHMesh::VertexNormal> VertexNormals;
|
||||||
|
std::vector<SHMesh::Index> Indices;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,206 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHPrimitiveGenerator.cpp
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Aug 30, 2022
|
||||||
|
\brief Contains definitions for all of the functions of the classes that deal
|
||||||
|
with storage and management of vertex and index buffers of meshes.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#include "SHpch.h"
|
||||||
|
#include "SHPrimitiveGenerator.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
SHMeshData SHPrimitiveGenerator::Cube() noexcept
|
||||||
|
{
|
||||||
|
SHMeshData mesh;
|
||||||
|
|
||||||
|
mesh.VertexPositions =
|
||||||
|
{
|
||||||
|
// front
|
||||||
|
SHVec3(-0.5f, -0.5f, 0.5f),
|
||||||
|
SHVec3( 0.5f, -0.5f, 0.5f),
|
||||||
|
SHVec3( 0.5f, 0.5f, 0.5f),
|
||||||
|
SHVec3(-0.5f, 0.5f, 0.5f),
|
||||||
|
|
||||||
|
// back
|
||||||
|
SHVec3(-0.5f, -0.5f, -0.5f),
|
||||||
|
SHVec3(-0.5f, 0.5f, -0.5f),
|
||||||
|
SHVec3( 0.5f, 0.5f, -0.5f),
|
||||||
|
SHVec3( 0.5f, -0.5f, -0.5f),
|
||||||
|
|
||||||
|
// top
|
||||||
|
SHVec3(-0.5f, 0.5f, -0.5f),
|
||||||
|
SHVec3(-0.5f, 0.5f, 0.5f),
|
||||||
|
SHVec3( 0.5f, 0.5f, 0.5f),
|
||||||
|
SHVec3( 0.5f, 0.5f, -0.5f),
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
SHVec3(-0.5f, -0.5f, -0.5f),
|
||||||
|
SHVec3( 0.5f, -0.5f, -0.5f),
|
||||||
|
SHVec3( 0.5f, -0.5f, 0.5f),
|
||||||
|
SHVec3(-0.5f, -0.5f, 0.5f),
|
||||||
|
|
||||||
|
// right
|
||||||
|
SHVec3(0.5f, -0.5f, -0.5f),
|
||||||
|
SHVec3(0.5f, 0.5f, -0.5f),
|
||||||
|
SHVec3(0.5f, 0.5f, 0.5f),
|
||||||
|
SHVec3(0.5f, -0.5f, 0.5f),
|
||||||
|
|
||||||
|
// left
|
||||||
|
SHVec3(-0.5f, -0.5f, -0.5f),
|
||||||
|
SHVec3(-0.5f, -0.5f, 0.5f),
|
||||||
|
SHVec3(-0.5f, 0.5f, 0.5f),
|
||||||
|
SHVec3(-0.5f, 0.5f, -0.5f)
|
||||||
|
};
|
||||||
|
|
||||||
|
mesh.VertexTexCoords =
|
||||||
|
{
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f),
|
||||||
|
|
||||||
|
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f),
|
||||||
|
|
||||||
|
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f),
|
||||||
|
|
||||||
|
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f),
|
||||||
|
|
||||||
|
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f),
|
||||||
|
|
||||||
|
|
||||||
|
SHVec2(0.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 1.0f),
|
||||||
|
SHVec2(1.0f, 0.0f),
|
||||||
|
SHVec2(0.0f, 0.0f)
|
||||||
|
};
|
||||||
|
|
||||||
|
mesh.VertexTangents =
|
||||||
|
{
|
||||||
|
// front
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
|
||||||
|
// back
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
|
||||||
|
// top
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
|
||||||
|
// right
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
|
||||||
|
// left
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
mesh.VertexNormals =
|
||||||
|
{
|
||||||
|
// front
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, 1.0f),
|
||||||
|
|
||||||
|
//back
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
SHVec3(0.0f, 0.0f, -1.0f),
|
||||||
|
|
||||||
|
// top
|
||||||
|
SHVec3(0.0f, 1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, 1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, 1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, 1.0f, 0.0f),
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
SHVec3(0.0f, -1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, -1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, -1.0f, 0.0f),
|
||||||
|
SHVec3(0.0f, -1.0f, 0.0f),
|
||||||
|
|
||||||
|
// right
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(1.0f, 0.0f, 0.0f),
|
||||||
|
|
||||||
|
// left
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
SHVec3(-1.0f, 0.0f, 0.0f)
|
||||||
|
};
|
||||||
|
|
||||||
|
mesh.Indices =
|
||||||
|
{
|
||||||
|
0, 1, 2, 0, 2, 3,
|
||||||
|
4, 5, 6, 4, 6, 7,
|
||||||
|
8, 9, 10, 8, 10, 11,
|
||||||
|
12, 13, 14, 12, 14, 15,
|
||||||
|
16, 17, 18, 16, 18, 19,
|
||||||
|
20, 21, 22, 20, 22, 23
|
||||||
|
};
|
||||||
|
|
||||||
|
return mesh;
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle<SHMesh> SHPrimitiveGenerator::Cube(SHMeshLibrary& meshLibrary) noexcept
|
||||||
|
{
|
||||||
|
SHMeshData meshData = Cube();
|
||||||
|
return meshLibrary.AddMesh
|
||||||
|
(
|
||||||
|
meshData.VertexPositions.size(),
|
||||||
|
meshData.VertexPositions.data(),
|
||||||
|
meshData.VertexTexCoords.data(),
|
||||||
|
meshData.VertexTangents.data(),
|
||||||
|
meshData.VertexNormals.data(),
|
||||||
|
meshData.Indices.size(),
|
||||||
|
meshData.Indices.data()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHPrimitiveGenerator.h
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 18, 2022
|
||||||
|
\brief Contains the static class definition of SHPrimitiveGenerator.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Project Includes
|
||||||
|
#include "Math/SHMath.h"
|
||||||
|
#include "SHMeshData.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*************************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Static class that contains functions for generating 3D primitives.
|
||||||
|
*/
|
||||||
|
/*************************************************************************************/
|
||||||
|
class SHPrimitiveGenerator
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
SHPrimitiveGenerator() = delete;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Primitive Generation Functions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/***********************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Produces a cube and stores the data in a SHMeshData object.
|
||||||
|
|
||||||
|
\return
|
||||||
|
SHMeshData object containing vertex data for the cube.
|
||||||
|
*/
|
||||||
|
/***********************************************************************************/
|
||||||
|
[[nodiscard]] static SHMeshData Cube() noexcept;
|
||||||
|
/***********************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Produces a cube and constructs a SHMesh using the SHMeshLibrary provided.
|
||||||
|
|
||||||
|
\param meshLibrary
|
||||||
|
Reference to the SHMeshLibrary to procude and store a cube mesh in.
|
||||||
|
|
||||||
|
\return
|
||||||
|
SHMesh object that points to the generated cube mesh in the SHMeshLibrary.
|
||||||
|
*/
|
||||||
|
/***********************************************************************************/
|
||||||
|
[[nodiscard]] static Handle<SHMesh> Cube(SHMeshLibrary& meshLibrary) noexcept;
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue