Added half cut tape.

This commit is contained in:
2020-04-06 17:40:20 -04:00
parent 5c0f8bf079
commit 3bda314253
12 changed files with 5135 additions and 818 deletions

View File

@ -212,6 +212,7 @@ namespace DGL
rotation (Vector3(0.0f) ),
scale (Vector3(1.0f) ),
model (NULL ),
he_Model (NULL ),
transform(CoordSpace(1.0f))
{};
@ -220,6 +221,18 @@ namespace DGL
rotation (Vector3(0.0f) ),
scale (Vector3(1.0f) ),
model (&_model ),
he_Model (NULL ),
transform(CoordSpace(1.0f)),
material (_material )
//type (_type )
{};
Entity_Basic(HE_Model& _model, Material_Phong& _material) :
position (Vector3(0.0f) ),
rotation (Vector3(0.0f) ),
scale (Vector3(1.0f) ),
model (NULL ),
he_Model (&_model ),
transform(CoordSpace(1.0f)),
material (_material )
//type (_type )
@ -234,9 +247,18 @@ namespace DGL
{
model = &_model;
he_Model = NULL;
return;
}
void SetModel(HE_Model& _model)
{
he_Model = &_model;
model = NULL;
}
void SetScale(gFloat _scaleBy)
{
scale = Vector3(_scaleBy);
@ -295,7 +317,14 @@ namespace DGL
{
PhongShader::Use(_projection, _viewport, transform, _lightPosition,_lightColor, material);
(*model).Render();
if (model != NULL)
{
(*model).Render();
}
else
{
(*he_Model).Render();
}
PhongShader::Stop();
@ -307,6 +336,7 @@ namespace DGL
position = _entity.position ;
scale = _entity.scale ;
model = _entity.model ;
he_Model = _entity.he_Model ;
transform = _entity.transform;
material = _entity.material ;
@ -321,6 +351,7 @@ namespace DGL
Vector3 rotation ;
Vector3 scale ;
Model* model ;
HE_Model* he_Model;
CoordSpace transform;
Material_Phong material ;
};

View File

@ -13,6 +13,9 @@ Allows the management of loading and buffer/rendering models from wavefront obj
#include "DGL_Types.hpp"
#include "DGL_Space.hpp"
// OpenMesh
#include "OMesh/OMeshInterface.hpp"
// Non-Standard C++
#include "Cpp_Alias.hpp"
@ -69,17 +72,6 @@ namespace DGL
ComponentList comp;
};
struct Face
{
Vec3Int Vertexes;
};
using FaceList = std::vector<Face>;
struct FaceGenerator
{
using ComponentList = std::vector< gUInt>;
@ -107,7 +99,7 @@ namespace DGL
for (int index = 0; index < 3; index++)
{
generated.Vertexes.vec[index] = vertIndexes[index];
generated.vec[index] = vertIndexes[index];
if (index < 2)
{
@ -146,9 +138,9 @@ namespace DGL
for (int faceIndex = 0; faceIndex < faces.size(); faceIndex++)
{
int vertexIndex1 = faces[faceIndex].Vertexes.vec[0],
vertexIndex2 = faces[faceIndex].Vertexes.vec[1],
vertexIndex3 = faces[faceIndex].Vertexes.vec[2] ;
int vertexIndex1 = faces[faceIndex].vec[0],
vertexIndex2 = faces[faceIndex].vec[1],
vertexIndex3 = faces[faceIndex].vec[2] ;
Vector3 vert1 = verticies[vertexIndex1],
vert2 = verticies[vertexIndex2],
@ -470,4 +462,125 @@ namespace DGL
FaceList faces ;
VIndexList indicies ;
};
class HE_Model
{
using HE_Mesh = OMeshInterface::OMesh_HE;
public:
HE_Model(const string& _filePath) :
loaded (false ),
vertexArrayID (-1 ),
vertexBufferID (-1 ),
normalBuffferID(-1 ),
textureBufferID(-1 ),
elementBufferID(-1 ),
filePath (_filePath),
mesh ()
{}
void Buffer()
{
// Generate buffers
GenerateVertexBuffers(vertexArrayID , 1);
GenerateBuffers (vertexBufferID , 1);
GenerateBuffers (normalBuffferID, 1);
GenerateBuffers (elementBufferID, 1);
BindVertexArray(vertexArrayID);
// Vertex Position Buffering
BindBuffer(EBufferTarget::VertexAttributes, vertexBufferID);
const VertexList& verts = mesh.GetVerticies();
BufferData(verts[0], gSize(verts.size() * sizeof(Vector3)), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
FormatVertexAttributes<Vector3>(0, EDataType::Float, ZeroOffset(), 3, false);
EnableVertexAttributeArray(0);
// Normal Buffering
BindBuffer(EBufferTarget::VertexAttributes, normalBuffferID);
const VertexList& normals = mesh.GetFaceNormals();
BufferData(normals[0], gSize(normals.size() * sizeof(Vector3)), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
FormatVertexAttributes<Vector3>(1, EDataType::Float, ZeroOffset(), 3, false);
EnableVertexAttributeArray(1);
// Element Buffering
const FaceList& faces = mesh.GetFaces();
BindBuffer(EBufferTarget::VertexIndices, elementBufferID);
BufferData(faces[0], gSize(faces.size() * sizeof(Face)), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw);
UnbindVertexArray(); // Unbind vertex array.
}
void Load()
{
mesh.Load(filePath);
Buffer();
}
bool Ready()
{
return loaded;
}
void Render()
{
BindVertexArray(vertexArrayID);
gInt SizeRef; GetBufferParameterIV(EBufferTarget::VertexIndices, EBufferParam::Size, SizeRef); SizeRef /= sizeof(gUInt);
DrawElements(EPrimitives::Triangles, SizeRef, EDataType::UnsignedInt, ZeroOffset());
UnbindVertexArray();
}
HE_Model& operator= (const HE_Model& _model)
{
loaded = _model.loaded;
vertexArrayID = _model.vertexArrayID ;
vertexBufferID = _model.vertexBufferID ;
normalBuffferID = _model.normalBuffferID;
textureBufferID = _model.textureBufferID;
elementBufferID = _model.elementBufferID;
filePath = _model.filePath;
mesh = _model.mesh;
return *this;
}
private:
bool loaded;
ID<VertexArray > vertexArrayID ;
ID<VertexBuffer > vertexBufferID ;
ID<NormalBuffer > normalBuffferID;
ID<TextureBuffer> textureBufferID;
ID<ElementBuffer> elementBufferID;
string filePath;
HE_Mesh mesh;
};
};

View File

@ -87,11 +87,12 @@ namespace DGL
struct Vec3Int
{
union
{
gUInt vec[3];
gUInt x, y, z;
};
//union
//{
//gUInt vec[3];
//gUInt x, y, z;
//};
};
//using Vec3Int = Generic::Vector3< gUInt >;
@ -111,6 +112,11 @@ namespace DGL
// DGL
using Face = Vec3Int;
using FaceList = std::vector<Face>;
using VecColor = Vector3;
struct LinearColor