Colored dataset started working : no indexes yet, neither working with standard light

This commit is contained in:
Hurlu 2019-03-18 10:17:32 +09:00
parent 638571af42
commit babd5c06fd
15 changed files with 139 additions and 58 deletions

View File

@ -6,10 +6,9 @@ public:
Dataset() {}
~Dataset() {}
unsigned int nFaces;
unsigned int nVertices;
std::vector<glm::vec3> vertices;
std::vector<glm::vec3> normals;
std::vector<glm::vec3> colors;
void clear()
{
@ -32,14 +31,64 @@ public:
{ -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} };
colors = {
{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0},
{0.0, 0.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
{0.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0},
{0.0, 0.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, 1.0, 0.0},
{1.0, 1.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, 1.0, 0.0},
{0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 1.0, 1.0},
{1.0, 0.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 1.0, 1.0},
{1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 1.0, 0.0},
{0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 0.0, 0.0},
{1.0, 1.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, 1.0},
{0.0, 0.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}
},
genNormals();
nVertices = vertices.size();
}
void simpleFloor()
{
{
vertices = {{-10.0, 0.0, -10.0}, {-10.0, 0.0, 10.0}, {10.0, 0.0, -10.0},
{10.0, 0.0, 10.0}, {10.0, 0.0, -10.0}, {-10.0, 0.0, 10.0}};
colors = { {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7},
{0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7} };
genNormals();
}
void checkeredFloor(float size, int squares,
glm::vec3 light_color, glm::vec3 dark_color)
{
float maxX = size / 2.f, maxY = size / 2.f;
float minX = -size / 2.f, minY = -size / 2.f;
float side_size = size / (float)squares;
int color = 1;
for (float x = minX; x < maxX; x += side_size)
{
for (float y = minY; y < maxY; y += side_size)
{
color *= -1;
glm::vec3 tile_color = (color > 0) ? light_color : dark_color;
//gen 1 carré
vertices.emplace_back(x, 0, y); //upleft
vertices.emplace_back(x, 0, y + side_size); //downleft
vertices.emplace_back(x + side_size, 0, y + side_size); //downright
vertices.emplace_back(x + side_size, 0, y + side_size); //downright
vertices.emplace_back(x + side_size, 0, y); //upright
vertices.emplace_back(x, 0, y); //upleft
for (int z = 0; z < 6; z++)
colors.push_back(tile_color);
}
color *= -1;
}
genNormals();
}
private:
void genNormals()

View File

@ -1,4 +1,4 @@

#define GLM_ENABLE_EXPERIMENTAL
#include <vector>
@ -20,6 +20,7 @@
Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
{
renderType = NO_INDEX;
parent = m;
vbo[VERTEX_BUFFER] = NULL;
@ -28,47 +29,47 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m)
vbo[INDEX_BUFFER] = NULL;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindVertexArray(vao);
float *vertices = new float[set.nVertices * 3];
for (unsigned int i = 0; i < set.nVertices; ++i) {
vertices[i * 3] = set.vertices[i].x;
vertices[i * 3 + 1] = set.vertices[i].y;
vertices[i * 3 + 2] = set.vertices[i].z;
}
//Copy Mesh vertices to VBO
glGenBuffers(1, &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, set.vertices.size() * 3 * sizeof(GLfloat), set.vertices.data(), GL_STATIC_DRAW);
glVertexAttribPointer(VERTEX_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glVertexAttribPointer(VERTEX_BUFFER, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL);
glEnableVertexAttribArray(VERTEX_BUFFER);
delete[] vertices;
float *normals = new float[set.nVertices * 3];
for (unsigned int i = 0; i < set.nVertices; ++i) {
normals[i * 3] = set.normals[i].x;
normals[i * 3 + 1] = set.normals[i].y;
normals[i * 3 + 2] = set.normals[i].z;
}
//Copy Normals to VBO
glGenBuffers(1, &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, set.normals.size() * 3 * sizeof(GLfloat), set.normals.data(), GL_STATIC_DRAW);
glVertexAttribPointer(NORMAL_BUFFER, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glVertexAttribPointer(NORMAL_BUFFER, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL);
glEnableVertexAttribArray(NORMAL_BUFFER);
delete[] normals;
//Copy vertice color to VBO
glGenBuffers(1, &vbo[TEXCOORD_BUFFER]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[TEXCOORD_BUFFER]);
glBufferData(GL_ARRAY_BUFFER, set.colors.size() * 3 * sizeof(GLfloat), set.colors.data(), GL_STATIC_DRAW);
glVertexAttribPointer(TEXCOORD_BUFFER, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL);
glEnableVertexAttribArray(TEXCOORD_BUFFER);
dset_size = set.vertices.size();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
shininessStrength = 0;
}
Mesh::MeshEntry::MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m)
{
renderType = OBJ;
parent = m;
vbo[VERTEX_BUFFER] = NULL;
@ -197,9 +198,16 @@ Mesh::MeshEntry::~MeshEntry() {
void Mesh::MeshEntry::render() {