port from perforce
This commit is contained in:
92
4kgfx/mesh.h
Normal file
92
4kgfx/mesh.h
Normal file
@@ -0,0 +1,92 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
struct MeshVertex
|
||||
{
|
||||
vec4 Position;
|
||||
vec4 Normal;
|
||||
};
|
||||
|
||||
|
||||
struct Instance
|
||||
{
|
||||
Matrix transform;
|
||||
};
|
||||
|
||||
|
||||
class Mesh
|
||||
{
|
||||
public:
|
||||
Mesh();
|
||||
|
||||
struct VertexInfo
|
||||
{
|
||||
int Pos;
|
||||
int Normal;
|
||||
int UV;
|
||||
|
||||
bool operator < (const VertexInfo& v) const
|
||||
{
|
||||
if (Pos == v.Pos)
|
||||
{
|
||||
if (Normal == v.Normal)
|
||||
{
|
||||
return UV < v.UV;
|
||||
}
|
||||
return Normal < v.Normal;
|
||||
}
|
||||
return Pos < v.Pos;
|
||||
}
|
||||
};
|
||||
|
||||
int VertexCount;
|
||||
int IndexCount;
|
||||
int FaceCount;
|
||||
|
||||
static const int MaxVertexBuffer = 65536;
|
||||
static const int MaxIndexBuffer = 65536 * 9 / 2;
|
||||
|
||||
MeshVertex* VertexBuffer;
|
||||
unsigned short* IndexBuffer;
|
||||
|
||||
struct OpInfo
|
||||
{
|
||||
void Reset();
|
||||
|
||||
MeshVertex NextVB[Mesh::MaxVertexBuffer];
|
||||
unsigned short int NextIB[Mesh::MaxIndexBuffer];
|
||||
int NextVertexCount;
|
||||
int NextIndexCount;
|
||||
int NextFaceCount;
|
||||
|
||||
int EdgeCount;
|
||||
unsigned int EdgeConfiguration[Mesh::MaxIndexBuffer];
|
||||
unsigned char EdgeUsage[Mesh::MaxIndexBuffer];
|
||||
int MakeEdgeID(unsigned short VertexA, unsigned short VertexB);
|
||||
unsigned short int EdgeID[Mesh::MaxIndexBuffer];
|
||||
};
|
||||
|
||||
OpInfo OP;
|
||||
|
||||
unsigned int VertexArrayObject;
|
||||
unsigned int VertexArrayBuffer;
|
||||
unsigned int IndexBufferObject;
|
||||
|
||||
void Render();
|
||||
void Lock();
|
||||
void Unlock();
|
||||
|
||||
void Transform(const Matrix& transform);
|
||||
void CreateCube();
|
||||
void CreateSphere(unsigned int lod);
|
||||
|
||||
private:
|
||||
void Homogenize();
|
||||
void GenerateNormals();
|
||||
void NormalizeNormals();
|
||||
void CatmullClarkSubdivide();
|
||||
void StandardSubdivide();
|
||||
void Extrude(float extend);
|
||||
void Bevel(float extend, float minAngle);
|
||||
void Triangulate();
|
||||
};
|
||||
Reference in New Issue
Block a user