summaryrefslogtreecommitdiff
path: root/quadtree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quadtree.cpp')
-rw-r--r--quadtree.cpp34
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;