mirror of
https://github.com/Ed94/DuctTaped_GL.git
synced 2025-06-15 19:41:48 -07:00
Added half cut tape.
This commit is contained in:
@ -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 ;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user