- Fix MeshGenerator addBlockModel method to use normals.
- Fix double-remove segfault in Main.cpp because of BlockModelmaster
parent
74b98e4b39
commit
a01bdedda3
|
@ -30,7 +30,7 @@ Texture* dirtTexture;
|
|||
GLfloat deltaTime = 0.0f;
|
||||
GLfloat lastTime = 0.0f;
|
||||
|
||||
BlockModel createBlockModel() {
|
||||
BlockModel* createBlockModel() {
|
||||
|
||||
Vertex* topVerts = new Vertex[4] {
|
||||
Vertex(new glm::vec3(0.0f, 1.0f, 0.0f), nullptr, new glm::vec2(0.0f, 0.0f)),
|
||||
|
@ -44,36 +44,35 @@ BlockModel createBlockModel() {
|
|||
|
||||
auto* topPart = new MeshPart(topVerts, 4, topInds, 6, "dirt");
|
||||
|
||||
return BlockModel(nullptr, nullptr, topPart, nullptr, nullptr, nullptr, nullptr, true, true);
|
||||
return new BlockModel(nullptr, nullptr, topPart, nullptr, nullptr, nullptr, nullptr, true, true);
|
||||
}
|
||||
|
||||
void makeEntities(BlockModel model) {
|
||||
void makeEntities(BlockModel* model) {
|
||||
int array[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE];
|
||||
for (int i = 0; i < CHUNK_SIZE; i++) {
|
||||
for (int j = 0; j < CHUNK_SIZE; j++) {
|
||||
for (int k = 0; k < CHUNK_SIZE; k++) {
|
||||
array[i][j][k] = (j < 8) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// int array[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE];
|
||||
// for (int i = 0; i < CHUNK_SIZE; i++) {
|
||||
// for (int j = 0; j < CHUNK_SIZE; j++) {
|
||||
// for (int k = 0; k < CHUNK_SIZE; k++) {
|
||||
// array[i][j][k] = (j < 8) ? 1 : 0;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// auto meshGen = new MeshGenerator();
|
||||
// MeshData *m = meshGen->build(array, &model);
|
||||
// delete meshGen;
|
||||
//
|
||||
// Mesh* mesh = new Mesh();
|
||||
// mesh->create(&m->vertices[0], &m->indices[0], (int)m->vertices.size(), (int)m->indices.size());
|
||||
//
|
||||
// for (int i = -16; i < 16; i++) {
|
||||
// for (int j = -16; j < 16; j++) {
|
||||
// auto *chunk = new Entity();
|
||||
// chunk->create(mesh);
|
||||
// chunk->setPosition(glm::vec3(i * CHUNK_SIZE, 0, j * CHUNK_SIZE));
|
||||
// chunk->setScale(0.5);
|
||||
// entities.push_back(chunk);
|
||||
// }
|
||||
// }
|
||||
auto meshGen = new MeshGenerator();
|
||||
MeshData *m = meshGen->build(array, model);
|
||||
delete meshGen;
|
||||
|
||||
Mesh* mesh = new Mesh();
|
||||
mesh->create(&m->vertices[0], &m->indices[0], (int)m->vertices.size(), (int)m->indices.size());
|
||||
|
||||
for (int i = -16; i < 16; i++) {
|
||||
for (int j = -16; j < 16; j++) {
|
||||
auto *chunk = new Entity();
|
||||
chunk->create(mesh);
|
||||
chunk->setPosition(glm::vec3(i * CHUNK_SIZE, 0, j * CHUNK_SIZE));
|
||||
chunk->setScale(0.5);
|
||||
entities.push_back(chunk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
@ -92,13 +91,13 @@ int main() {
|
|||
dirtTexture->load();
|
||||
|
||||
//Create model
|
||||
BlockModel model = createBlockModel();
|
||||
BlockModel* model = createBlockModel();
|
||||
|
||||
auto* mesh = model.topFaces[0];
|
||||
auto* mesh = model->topFaces[0];
|
||||
mesh->debug();
|
||||
|
||||
//Create entities
|
||||
// makeEntities(model);
|
||||
makeEntities(model);
|
||||
|
||||
//Create shader
|
||||
shader = new Shader();
|
||||
|
|
|
@ -18,6 +18,8 @@ MeshData* MeshGenerator::build(int blocks[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE], B
|
|||
vertices->reserve(32768);
|
||||
indices->reserve(8192);
|
||||
|
||||
// addBlockModel(&k, &j, &i, model);
|
||||
|
||||
for (int i = 0; i < CHUNK_SIZE; i++) {
|
||||
for (int j = 0; j < CHUNK_SIZE; j++) {
|
||||
for (int k = 0; k < CHUNK_SIZE; k++) {
|
||||
|
@ -50,21 +52,31 @@ MeshData* MeshGenerator::build(int blocks[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE], B
|
|||
}
|
||||
|
||||
void MeshGenerator::addBlockModel(int* x, int* y, int* z, BlockModel* model) {
|
||||
MeshVertexIter* iter = model->topFaces[0]->getVertexIterator();
|
||||
for (MeshPart* mp : model->topFaces) {
|
||||
|
||||
while (iter->hasNext()) {
|
||||
Vertex* vertex = iter->next();
|
||||
MeshVertexIter* mvIterator = mp->getVertexIterator();
|
||||
while (mvIterator->hasNext()) {
|
||||
Vertex* vertex = mvIterator->next();
|
||||
|
||||
vertices->push_back(vertex->pos->x + *x);
|
||||
vertices->push_back(vertex->pos->y + *y);
|
||||
vertices->push_back(vertex->pos->z + *z);
|
||||
vertices->push_back(vertex->pos->x + *x);
|
||||
vertices->push_back(vertex->pos->y + *y);
|
||||
vertices->push_back(vertex->pos->z + *z);
|
||||
|
||||
vertices->push_back(vertex->tex->x);
|
||||
vertices->push_back(vertex->tex->y);
|
||||
vertices->push_back(vertex->tex->x);
|
||||
vertices->push_back(vertex->tex->y);
|
||||
|
||||
vertices->push_back(vertex->nml->x);
|
||||
vertices->push_back(vertex->nml->y);
|
||||
vertices->push_back(vertex->nml->z);
|
||||
}
|
||||
|
||||
MeshIndexIter* miIterator = mp->getIndexIterator();
|
||||
while(miIterator->hasNext()) {
|
||||
unsigned int index = miIterator->next();
|
||||
indices->push_back(indOffset + index);
|
||||
}
|
||||
indOffset += mp->getVertexCount();
|
||||
|
||||
vertices->push_back(0);
|
||||
vertices->push_back(0);
|
||||
vertices->push_back(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue