Progress on Dataset meshes
This commit is contained in:
parent
9b42d26f05
commit
638571af42
@ -3,11 +3,51 @@
|
||||
class Dataset
|
||||
{
|
||||
public:
|
||||
Dataset();
|
||||
~Dataset();
|
||||
Dataset() {}
|
||||
~Dataset() {}
|
||||
|
||||
unsigned int nFaces;
|
||||
unsigned int nVertices;
|
||||
std::vector<glm::vec3> vertices;
|
||||
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);
|
||||
glBindVertexArray(vao);
|
||||
|
||||
elementCount = set.nFaces * 3;
|
||||
|
||||
|
||||
float *vertices = new float[set.nVertices * 3];
|
||||
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]);
|
||||
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(VERTEX_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||
glEnableVertexAttribArray(VERTEX_BUFFER);
|
||||
|
||||
delete[] vertices;
|
||||
|
||||
@ -59,11 +58,13 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo[NORMAL_BUFFER]);
|
||||
glBufferData(GL_ARRAY_BUFFER, 3 * set.nVertices * sizeof(GLfloat), normals, GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(NORMAL_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
||||
glEnableVertexAttribArray(NORMAL_BUFFER);
|
||||
|
||||
delete[] normals;
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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()) {
|
||||
float *normals = new float[mesh->mNumVertices * 3];
|
||||
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;
|
||||
}
|
||||
|
||||
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()) {
|
||||
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);
|
||||
glBindVertexArray(0);
|
||||
|
||||
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -191,9 +188,7 @@ Mesh::MeshEntry::~MeshEntry() {
|
||||
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) {
|
||||
diffuse = glm::vec3(0.9, 0.9, 0.9);
|
||||
}
|
||||
|
||||
|
||||
if (glm::length(specular) == 0) {
|
||||
specular = glm::vec3(0.4, 0.4, 0.4);
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ class Mesh
|
||||
public:
|
||||
struct MeshEntry {
|
||||
enum BUFFERS {
|
||||
VERTEX_BUFFER, TEXCOORD_BUFFER, NORMAL_BUFFER, INDEX_BUFFER
|
||||
VERTEX_BUFFER, NORMAL_BUFFER, TEXCOORD_BUFFER, INDEX_BUFFER
|
||||
};
|
||||
GLuint vao;
|
||||
GLuint vbo[4];
|
||||
@ -52,7 +52,7 @@ public:
|
||||
|
||||
public:
|
||||
Mesh(const char *filename, Shader *sh);
|
||||
Mesh(Dataset dataset, Shader *sh);
|
||||
Mesh(Dataset &dataset, Shader *sh);
|
||||
~Mesh(void);
|
||||
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)));
|
||||
|
||||
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"]->uniformFlags = ShaderFlags::MVP_FLAG;
|
||||
//shaders["SilhouetteShader"]->addUniform("fColor", glm::vec3(237/255, 229/255, 194/255));
|
||||
//shaders["SilhouetteShader"]->addUniform("sil_offset", 0.1f);
|
||||
//
|
||||
shaders["SilhouetteShader"] = new Shader("silhouette.vert", "silhouette.frag");
|
||||
shaders["SilhouetteShader"]->uniformFlags = ShaderFlags::MVP_FLAG;
|
||||
shaders["SilhouetteShader"]->addUniform("fColor", glm::vec3(237/255, 229/255, 194/255));
|
||||
shaders["SilhouetteShader"]->addUniform("sil_offset", 0.1f);
|
||||
|
||||
|
||||
//shaders["ToonShader"] = new Shader("light.vert", "toon.frag");
|
||||
////Removing useless specular component
|
||||
//shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::KS_FLAG;
|
||||
//shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::SHINE_FLAG;
|
||||
//
|
||||
meshes.push_back(new Mesh("quad.obj", shaders["StandardLight"]));
|
||||
|
||||
/*meshes.push_back(new Mesh("teapot.obj", shaders["SilhouetteShader"]));
|
||||
shaders["ToonShader"] = new Shader("light.vert", "toon.frag");
|
||||
//Removing useless specular component
|
||||
shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::KS_FLAG;
|
||||
shaders["ToonShader"]->uniformFlags &= ~ShaderFlags::SHINE_FLAG;
|
||||
|
||||
Dataset cube;
|
||||
cube.simpleCube();
|
||||
|
||||
meshes.push_back(new Mesh("teapot.obj", shaders["SilhouetteShader"]));
|
||||
meshes.back()->cullMode = FRONT;
|
||||
meshes.back()->addTranslation(glm::vec4(-2, 0, -5, 0));
|
||||
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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user