diff options
Diffstat (limited to 'quadtree.cpp')
-rw-r--r-- | quadtree.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/quadtree.cpp b/quadtree.cpp index d591730..15759d9 100644 --- a/quadtree.cpp +++ b/quadtree.cpp @@ -48,23 +48,23 @@ float Quadtree::QuadNode::distance(float px, float pz) { void Quadtree::QuadNode::fill() { vertex_array[0] = x + width / 2; - vertex_array[1] = chunk->tree->heights[(int)floorf((int)(x + width/2)*chunk->tree->height + (int)(y + height/2))]; + vertex_array[1] = chunk->tree->heights[(int)floorf((int)(chunk->x + x + width/2)*chunk->tree->height + (int)(chunk->y + y + height/2))]; vertex_array[2] = y + height / 2; vertex_array[3] = x; - vertex_array[4] = chunk->tree->heights[(int)floorf(x*chunk->tree->height+y)]; + vertex_array[4] = chunk->tree->heights[(int)floorf((chunk->x + x)*chunk->tree->height+chunk->y + y)]; vertex_array[5] = y; vertex_array[6] = x; - vertex_array[7] = chunk->tree->heights[(int)floorf(x*chunk->tree->height + (y + height))]; + vertex_array[7] = chunk->tree->heights[(int)floorf((chunk->x + x)*chunk->tree->height + (chunk->y + y + height))]; vertex_array[8] = y + height; vertex_array[9] = x + width; - vertex_array[10] = chunk->tree->heights[(int)floorf((x + width)*chunk->tree->height + (y + height))]; + vertex_array[10] = chunk->tree->heights[(int)floorf((chunk->x + x + width)*chunk->tree->height + (chunk->y + y + height))]; vertex_array[11] = y + height; vertex_array[12] = x + width; - vertex_array[13] = chunk->tree->heights[(int)floorf((x + width)*chunk->tree->height + y)]; + vertex_array[13] = chunk->tree->heights[(int)floorf((chunk->x + x + width)*chunk->tree->height + chunk->y + y)]; vertex_array[14] = y; /* midpoint is average of corner heights when width == 1 */ @@ -111,19 +111,21 @@ void Quadtree::QuadNode::draw_grid() { Vector3 a(vertex_array[0], vertex_array[1], vertex_array[2]); Vector3 b(vertex_array[i*3+3], vertex_array[i*3+4], vertex_array[i*3+5]); - glVertex3f(a.x, a.y, a.z); - glVertex3f(b.x, b.y, b.z); + glVertex3f(chunk->x + a.x, a.y, chunk->y + a.z); + glVertex3f(chunk->x + b.x, b.y, chunk->y + b.z); } glEnd(); glBegin(GL_LINE_LOOP); - glVertex3f(vertex_array[3], vertex_array[4], vertex_array[5]); - glVertex3f(vertex_array[6], vertex_array[7], vertex_array[8]); - glVertex3f(vertex_array[9], vertex_array[10], vertex_array[11]); - glVertex3f(vertex_array[12], vertex_array[13], vertex_array[14]); + glVertex3f(chunk->x + vertex_array[3], vertex_array[4], chunk->y + vertex_array[5]); + glVertex3f(chunk->x + vertex_array[6], vertex_array[7], chunk->y + vertex_array[8]); + glVertex3f(chunk->x + vertex_array[9], vertex_array[10], chunk->y + vertex_array[11]); + glVertex3f(chunk->x + vertex_array[12], vertex_array[13], chunk->y + vertex_array[14]); glEnd(); } float Quadtree::QuadNode::get_height(float px, float py) { + px -= chunk->x; + py -= chunk->y; bool left; bool top; top = px - x >= height - (py - y); @@ -182,7 +184,7 @@ Quadtree::QuadChunk::QuadChunk(Quadtree *tree, float x, float y, float width, fl nodes = new QuadNode*[node_count]; for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { - nodes[j*(int)height + i] = new QuadNode(this, x+j, y+i, 1, 1); + nodes[j*(int)height + i] = new QuadNode(this, j, i, 1, 1); } } } @@ -285,10 +287,10 @@ void Quadtree::QuadChunk::make_vbo() { float *n = buffer + vertices_size + normal_chunk_size*index; - Vector3 bl = tree->normals[(int)((node->x+1)*tree->height + node->y)]; - Vector3 br = tree->normals[(int)(node->x*tree->height + node->y)]; - Vector3 tr = tree->normals[(int)(node->x*tree->height + node->y+1)]; - Vector3 tl = tree->normals[(int)((node->x+1)*tree->height + node->y+1)]; + Vector3 bl = tree->normals[(int)((this->x+node->x+1)*tree->height + this->y+node->y)]; + Vector3 br = tree->normals[(int)((this->x+node->x)*tree->height + this->y+node->y)]; + Vector3 tr = tree->normals[(int)((this->x+node->x)*tree->height + this->y+node->y+1)]; + Vector3 tl = tree->normals[(int)((this->x+node->x+1)*tree->height + this->y+node->y+1)]; n[24] = n[30] = bl.x; n[25] = n[31] = bl.y; |