Progress on Dataset meshes
This commit is contained in:
parent
9b42d26f05
commit
638571af42
@ -3,11 +3,51 @@
|
|||||||
class Dataset
|
class Dataset
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Dataset();
|
Dataset() {}
|
||||||
~Dataset();
|
~Dataset() {}
|
||||||
|
|
||||||
unsigned int nFaces;
|
unsigned int nFaces;
|
||||||
unsigned int nVertices;
|
unsigned int nVertices;
|
||||||
std::vector<glm::vec3> vertices;
|
std::vector<glm::vec3> vertices;
|
||||||
std::vector<glm::vec3> normals;
|
std::vector<glm::vec3> normals;
|
||||||
|
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
vertices.clear();
|
||||||
|
normals.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void simpleCube()
|
||||||
|
{
|
||||||
|
vertices = { { -1.0, -1.0, 1.0}, { 1.0, -1.0, 1.0}, { 1.0, 1.0, 1.0},
|
||||||
|
{ 1.0, 1.0, 1.0}, { -1.0, 1.0, 1.0}, { -1.0, -1.0, 1.0},
|
||||||
|
{ 1.0, -1.0, 1.0}, { 1.0, -1.0, -1.0}, { 1.0, 1.0, -1.0},
|
||||||
|
{ 1.0, 1.0, -1.0}, { 1.0, 1.0, 1.0}, { 1.0, -1.0, 1.0},
|
||||||
|
{ -1.0, 1.0, -1.0}, { 1.0, 1.0, -1.0}, { 1.0, -1.0, -1.0},
|
||||||
|
{ 1.0, -1.0, -1.0}, { -1.0, -1.0, -1.0}, { -1.0, 1.0, -1.0},
|
||||||
|
{ -1.0, -1.0, -1.0}, { -1.0, -1.0, 1.0}, { -1.0, 1.0, 1.0},
|
||||||
|
{ -1.0, 1.0, 1.0}, { -1.0, 1.0, -1.0}, { -1.0, -1.0, -1.0},
|
||||||
|
{ -1.0, -1.0, -1.0}, { 1.0, -1.0, -1.0}, { 1.0, -1.0, 1.0},
|
||||||
|
{ 1.0, -1.0, 1.0}, { -1.0, -1.0, 1.0}, { -1.0, -1.0, -1.0},
|
||||||
|
{ -1.0, 1.0, 1.0}, { 1.0, 1.0, 1.0}, { 1.0, 1.0, -1.0},
|
||||||
|
{ 1.0, 1.0, -1.0}, { -1.0, 1.0, -1.0}, { -1.0, 1.0, 1.0} };
|
||||||
|
|
||||||
|
genNormals();
|
||||||
|
nVertices = vertices.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void simpleFloor()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
|
||||||
|
void genNormals()
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < vertices.size() - 2; i += 3)
|
||||||
|
{
|
||||||
|
glm::vec3 norm = glm::cross(vertices[i + 1] - vertices[i], vertices[i + 2] - vertices[i]);
|
||||||
|
normals.push_back(norm); normals.push_back(norm); normals.push_back(norm);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@ -29,8 +29,7 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
|
|||||||
|
|
||||||
glGenVertexArrays(1, &vao);
|
glGenVertexArrays(1, &vao);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
|
|
||||||
elementCount = set.nFaces * 3;
|
|
||||||
|
|
||||||
float *vertices = new float[set.nVertices * 3];
|
float *vertices = new float[set.nVertices * 3];
|
||||||
for (unsigned int i = 0; i < set.nVertices; ++i) {
|
for (unsigned int i = 0; i < set.nVertices; ++i) {
|
||||||
@ -43,8 +42,8 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[VERTEX_BUFFER]);
|
glBindBuffer(GL_ARRAY_BUFFER, vbo[VERTEX_BUFFER]);
|
||||||
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
glVertexAttribPointer(VERTEX_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(VERTEX_BUFFER);
|
||||||
|
|
||||||
delete[] vertices;
|
delete[] vertices;
|
||||||
|
|
||||||
@ -59,11 +58,13 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[NORMAL_BUFFER]);
|
glBindBuffer(GL_ARRAY_BUFFER, vbo[NORMAL_BUFFER]);
|
||||||
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), normals, GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), normals, GL_STATIC_DRAW);
|
||||||
|
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
glVertexAttribPointer(NORMAL_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
glEnableVertexAttribArray(1);
|
glEnableVertexAttribArray(NORMAL_BUFFER);
|
||||||
|
|
||||||
delete[] normals;
|
delete[] normals;
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
|
Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
|
||||||
@ -98,25 +99,6 @@ Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
|
|||||||
delete[] vertices;
|
delete[] vertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mesh->HasTextureCoords(0)) {
|
|
||||||
float *texCoords = new float[mesh->mNumVertices * 2];
|
|
||||||
for (unsigned int i = 0; i < mesh->mNumVertices; ++i) {
|
|
||||||
texCoords[i * 2] = mesh->mTextureCoords[0][i].x;
|
|
||||||
texCoords[i * 2 + 1] = mesh->mTextureCoords[0][i].y;
|
|
||||||
}
|
|
||||||
|
|
||||||
glGenBuffers(1, &vbo[TEXCOORD_BUFFER]);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[TEXCOORD_BUFFER]);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, 2 * mesh->mNumVertices * sizeof(GLfloat), texCoords, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
||||||
glEnableVertexAttribArray(2);
|
|
||||||
|
|
||||||
delete[] texCoords;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (mesh->HasNormals()) {
|
if (mesh->HasNormals()) {
|
||||||
float *normals = new float[mesh->mNumVertices * 3];
|
float *normals = new float[mesh->mNumVertices * 3];
|
||||||
for (unsigned int i = 0; i < mesh->mNumVertices; ++i) {
|
for (unsigned int i = 0; i < mesh->mNumVertices; ++i) {
|
||||||
@ -135,6 +117,23 @@ Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
|
|||||||
delete[] normals;
|
delete[] normals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mesh->HasTextureCoords(0)) {
|
||||||
|
float *texCoords = new float[mesh->mNumVertices * 2];
|
||||||
|
for (unsigned int i = 0; i < mesh->mNumVertices; ++i) {
|
||||||
|
texCoords[i * 2] = mesh->mTextureCoords[0][i].x;
|
||||||
|
texCoords[i * 2 + 1] = mesh->mTextureCoords[0][i].y;
|
||||||
|
}
|
||||||
|
|
||||||
|
glGenBuffers(1, &vbo[TEXCOORD_BUFFER]);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vbo[TEXCOORD_BUFFER]);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, 2 * mesh->mNumVertices * sizeof(GLfloat), texCoords, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||||
|
glEnableVertexAttribArray(2);
|
||||||
|
|
||||||
|
delete[] texCoords;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mesh->HasFaces()) {
|
if (mesh->HasFaces()) {
|
||||||
unsigned int *indices = new unsigned int[mesh->mNumFaces * 3];
|
unsigned int *indices = new unsigned int[mesh->mNumFaces * 3];
|
||||||
@ -166,9 +165,7 @@ Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,9 +188,7 @@ Mesh::MeshEntry::~MeshEntry() {
|
|||||||
glDeleteBuffers(1, &vbo[INDEX_BUFFER]);
|
glDeleteBuffers(1, &vbo[INDEX_BUFFER]);
|
||||||
}
|
}
|
||||||
|
|
||||||
glDeleteVertexArrays(1, &vao);
|
glDeleteVertexArrays(1, &vao);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -291,7 +286,7 @@ void Mesh::draw(SceneContext ctx) {
|
|||||||
if (glm::length(diffuse) == 0) {
|
if (glm::length(diffuse) == 0) {
|
||||||
diffuse = glm::vec3(0.9, 0.9, 0.9);
|
diffuse = glm::vec3(0.9, 0.9, 0.9);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glm::length(specular) == 0) {
|
if (glm::length(specular) == 0) {
|
||||||
specular = glm::vec3(0.4, 0.4, 0.4);
|
specular = glm::vec3(0.4, 0.4, 0.4);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,7 @@ class Mesh
|
|||||||
public:
|
public:
|
||||||
struct MeshEntry {
|
struct MeshEntry {
|
||||||
enum BUFFERS {
|
enum BUFFERS {
|
||||||
VERTEX_BUFFER, TEXCOORD_BUFFER, NORMAL_BUFFER, INDEX_BUFFER
|
VERTEX_BUFFER, NORMAL_BUFFER, TEXCOORD_BUFFER, INDEX_BUFFER
|
||||||
};
|
};
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
GLuint vbo[4];
|
GLuint vbo[4];
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Mesh(const char *filename, Shader *sh);
|
Mesh(const char *filename, Shader *sh);
|
||||||
Mesh(Dataset dataset, Shader *sh);
|
Mesh(Dataset &dataset, Shader *sh);
|
||||||
~Mesh(void);
|
~Mesh(void);
|
||||||
std::vector<MeshEntry*> meshEntries;
|
std::vector<MeshEntry*> meshEntries;
|
||||||
|
|
||||||
|
|||||||
@ -64,26 +64,28 @@ void MyGlWindow::setup()
|
|||||||
_scnctx.lights.emplace("Light5", Light(glm::vec3(0.5f, 0.5f, 0.5f), glm::vec4(3.09, 10, -9.51, 1)));
|
_scnctx.lights.emplace("Light5", Light(glm::vec3(0.5f, 0.5f, 0.5f), glm::vec4(3.09, 10, -9.51, 1)));
|
||||||
|
|
||||||
shaders["StandardLight"] = new Shader("light.vert", "light.frag");
|
shaders["StandardLight"] = new Shader("light.vert", "light.frag");
|
||||||
//shaders["FogShader"] = new Shader("fog.vert", "fog.frag");
|
shaders["FogShader"] = new Shader("fog.vert", "fog.frag");
|
||||||
|
|
||||||
//shaders["SilhouetteShader"] = new Shader("silhouette.vert", "silhouette.frag");
|
shaders["SilhouetteShader"] = new Shader("silhouette.vert", "silhouette.frag");
|
||||||
//shaders["SilhouetteShader"]->uniformFlags = ShaderFlags::MVP_FLAG;
|
shaders["SilhouetteShader"]->uniformFlags = ShaderFlags::MVP_FLAG;
|
||||||
//shaders["SilhouetteShader"]->addUniform("fColor", glm::vec3(237/255, 229/255, 194/255));
|
shaders["SilhouetteShader"]->addUniform("fColor", glm::vec3(237/255, 229/255, 194/255));
|
||||||
//shaders["SilhouetteShader"]->addUniform("sil_offset", 0.1f);
|
shaders["SilhouetteShader"]->addUniform("sil_offset", 0.1f);
|
||||||
//
|
|
||||||
|
|
||||||
|
shaders["ToonShader"] = new Shader("light.vert", "toon.frag");
|
||||||
//shaders["ToonShader"] = new Shader("light.vert", "toon.frag");
|
//Removing useless specular component
|
||||||
////Removing useless specular component
|
shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::KS_FLAG;
|
||||||
//shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::KS_FLAG;
|
shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::SHINE_FLAG;
|
||||||
//shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::SHINE_FLAG;
|
|
||||||
//
|
Dataset cube;
|
||||||
meshes.push_back(new Mesh("quad.obj", shaders["StandardLight"]));
|
cube.simpleCube();
|
||||||
|
|
||||||
/*meshes.push_back(new Mesh("teapot.obj", shaders["SilhouetteShader"]));
|
meshes.push_back(new Mesh("teapot.obj", shaders["SilhouetteShader"]));
|
||||||
meshes.back()->cullMode = FRONT;
|
meshes.back()->cullMode = FRONT;
|
||||||
|
meshes.back()->addTranslation(glm::vec4(-2, 0, -5, 0));
|
||||||
meshes.push_back(new Mesh("teapot.obj", shaders["ToonShader"]));
|
meshes.push_back(new Mesh("teapot.obj", shaders["ToonShader"]));
|
||||||
meshes.back()->cullMode = BACK;*/
|
meshes.back()->cullMode = BACK;
|
||||||
|
meshes.back()->addTranslation(glm::vec4(-2, 0, -5, 0));
|
||||||
|
meshes.push_back(new Mesh(cube, shaders["StandardLight"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGlWindow::draw()
|
void MyGlWindow::draw()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user