From 3c487c5cd69c53d6fea948643c0a76df03516605 Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 1 Apr 2022 21:23:39 +0200 Subject: Moved Stars45 to StarsEx --- StarsEx/Polygon.h | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 StarsEx/Polygon.h (limited to 'StarsEx/Polygon.h') diff --git a/StarsEx/Polygon.h b/StarsEx/Polygon.h new file mode 100644 index 0000000..e011afc --- /dev/null +++ b/StarsEx/Polygon.h @@ -0,0 +1,158 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. + + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Polygon structures: VertexSet, Poly, Material +*/ + +#ifndef Polygon_h +#define Polygon_h + +#include "Geometry.h" +#include "Color.h" + +// +--------------------------------------------------------------------+ + +class Bitmap; +struct Poly; +struct Material; +struct VertexSet; + +// +--------------------------------------------------------------------+ + +struct Poly +{ + static const char* TYPENAME() { return "Poly"; } + + enum { MAX_VERTS = 4 }; + + Poly() { } + Poly(int init); + ~Poly() { } + + int operator < (const Poly& p) const { return sortval < p.sortval; } + int operator == (const Poly& p) const { return this == &p; } + + int Contains(const Vec3& pt) const; + + BYTE nverts; + BYTE visible; + WORD verts[MAX_VERTS]; + WORD vlocs[MAX_VERTS]; + VertexSet* vertex_set; + Material* material; + int sortval; + float flatness; + Plane plane; +}; + +// +--------------------------------------------------------------------+ + +struct Material +{ + static const char* TYPENAME() { return "Material"; } + + enum BLEND_TYPE { MTL_SOLID=1, MTL_TRANSLUCENT=2, MTL_ADDITIVE=4 }; + enum { NAMELEN=32 }; + + Material(); + ~Material(); + + int operator == (const Material& m) const; + + void Clear(); + + char name[NAMELEN]; + char shader[NAMELEN]; + + ColorValue Ka; // ambient color + ColorValue Kd; // diffuse color + ColorValue Ks; // specular color + ColorValue Ke; // emissive color + float power; // highlight sharpness (big=shiny) + float brilliance; // diffuse power function + float bump; // bump level (0=none) + DWORD blend; // alpha blend type + bool shadow; // casts shadow + bool luminous; // verts have their own lighting + + Bitmap* tex_diffuse; + Bitmap* tex_specular; + Bitmap* tex_bumpmap; + Bitmap* tex_emissive; + Bitmap* tex_alternate; + Bitmap* tex_detail; + + bool IsSolid() const { return blend == MTL_SOLID; } + bool IsTranslucent() const { return blend == MTL_TRANSLUCENT; } + bool IsGlowing() const { return blend == MTL_ADDITIVE; } + const char* GetShader(int n) const; + + // + // Support for Magic GUI + // + + Color ambient_color; + Color diffuse_color; + Color specular_color; + Color emissive_color; + + float ambient_value; + float diffuse_value; + float specular_value; + float emissive_value; + + Bitmap* thumbnail; // preview image + + void CreateThumbnail(int size=128); + DWORD GetThumbColor(int i, int j, int size); +}; + +// +--------------------------------------------------------------------+ + +struct VertexSet +{ + static const char* TYPENAME() { return "VertexSet"; } + + enum VertexSpaces { OBJECT_SPACE, WORLD_SPACE, VIEW_SPACE, SCREEN_SPACE }; + + VertexSet(int m); + ~VertexSet(); + + void Resize(int m, bool preserve=false); + void Delete(); + void Clear(); + void CreateTangents(); + void CreateAdditionalTexCoords(); + bool CopyVertex(int dst, int src); + void CalcExtents(Point& plus, Point& minus); + + VertexSet* Clone() const; + + int nverts; + int space; + + Vec3* loc; + Vec3* nrm; + Vec3* s_loc; + float* rw; + float* tu; + float* tv; + float* tu1; + float* tv1; + DWORD* diffuse; + DWORD* specular; + Vec3* tangent; + Vec3* binormal; +}; + +// +--------------------------------------------------------------------+ + +#endif // Polygon_h + -- cgit v1.1