CSC3223_Graphics_For_Games_Software_Rasteriser / SoftwareRasteriser / Mesh.h
Mesh.h
Raw
/******************************************************************************
Class:Mesh
Implements:
Author:Rich Davison	<richard.davison4@newcastle.ac.uk>
Description: Class to represent the geometric data that makes up the meshes
we render on screen.
-_-_-_-_-_-_-_,------,
_-_-_-_-_-_-_-|   /\_/\   NYANYANYAN
-_-_-_-_-_-_-~|__( ^ .^) /
_-_-_-_-_-_-_-""  ""
*/ /////////////////////////////////////////////////////////////////////////////

#pragma once

#include "Vector4.h"
#include "Colour.h"
#include "Vector3.h"
#include "Vector2.h"
#include "Common.h"

#include <string>
#include <fstream>

using std::ifstream;
using std::string;

enum PrimitiveType
{
  PRIMITIVE_POINTS,
  PRIMITIVE_LINES,
  PRIMITIVE_TRIANGLES,
  PRIMITIVE_TRIANGLES_STRIP,
  PRIMITIVE_TRIANGLES_FAN
};

class Mesh
{
  friend class SoftwareRasteriser;

public:
  Mesh(void);
  ~Mesh(void);

  static Mesh *GenerateLine(const Vector3& from, const Vector3& to);
  static Mesh *GeneratePoints(const Vector3& pos, const Colour& col = Colour(255, 255, 255, 255));
  static Mesh *GenerateTriangle();
  static Mesh *LoadMeshFile(const string& filename);

  static Mesh *GenerateTriangleStripPrimitives();
  static Mesh *GenerateTriangleFanPrimitives();
  
  static Mesh *GenerateNSidedShape(const int sides);
  static Mesh *GeneratePlanetCircle(const float radius = 0.6f, const int size = 5);
  static Mesh *GenerateSpaceDebrish(const float radiusOut = 0.6f, const float radiusIn = 0.5f, const int size = 5);
  static Mesh *GenerateMoonSphere(const float radius = 0.6f, const int size = 5, const Colour& colour = Colour::White);
  
  PrimitiveType GetType()
  {
    return type;
  }

protected:
  PrimitiveType type;

  uint numVertices;

  Vector4* vertices;
  Colour*  colours;
  Vector2* textureCoords;
};