summaryrefslogtreecommitdiff
path: root/terrain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'terrain.cpp')
-rw-r--r--terrain.cpp56
1 files changed, 7 insertions, 49 deletions
diff --git a/terrain.cpp b/terrain.cpp
index 4035a89..e32a52b 100644
--- a/terrain.cpp
+++ b/terrain.cpp
@@ -132,7 +132,6 @@ Terrain::Chunk::Chunk(Terrain *terrain, float x, float y) : cache_obj(terrain->t
this->n_height = height+1;
this->vbo_object = this->node_count = this->vertices = 0;
this->nodes = NULL;
- this->need_normals = true;
heights = cache_obj->heights;
normals = new Vector3[(int)((n_width)*(n_height))];
@@ -146,8 +145,7 @@ Terrain::Chunk::Chunk(Terrain *terrain, float x, float y) : cache_obj(terrain->t
}
}
- if(!need_normals)
- make_vbo();
+ make_vbo();
}
Terrain::Chunk::~Chunk() {
@@ -275,23 +273,6 @@ Terrain::Node* Terrain::Chunk::find(float x, float y) {
}
void Terrain::Chunk::calc_normals() {
- float *right, *left, *up, *down;
-
- /*TerrainCacheObject::p right_ob = terrain->tc->get_chunk(this->x - chunk_size, this->y, h_width, h_height),
- left_ob = terrain->tc->get_chunk(this->x + chunk_size, this->y, h_width, h_height),
- up_ob = terrain->tc->get_chunk(this->x, this->y + chunk_size, h_width, h_height),
- down_ob = terrain->tc->get_chunk(this->x, this->y - chunk_size, h_width, h_height);
-
- right = right_ob->heights;
- left = left_ob->heights;
- up = up_ob->heights;
- down = down_ob->heights;*/
-
- if(!right || !left || !up || !down) {
- need_normals = true;
- return;
- }
-
for(int x = 1; x < h_width-1; x++) {
for(int y = 1; y < h_height-1; y++) {
Vector3 p(x, heights[x*h_height + y], y);
@@ -299,48 +280,30 @@ void Terrain::Chunk::calc_normals() {
float h;
// right
- /*if(x == 0)
- h = right[(chunk_size-1)*(int)(h_height) + y];
- else*/
- h = heights[(x-1)*h_height + y];
+ h = heights[(x-1)*h_height + y];
U = Vector3(x-1, h, y) - p;
// down
- /*if(y == 0)
- h = down[x*(int)(h_height) + chunk_size - 1];
- else*/
- h = heights[x*h_height + y - 1];
+ h = heights[x*h_height + y - 1];
V = Vector3(x, h, y-1) - p;
N += V.cross(U);
// up
- /*if(y == h_height-1)
- h = up[x*(int)(h_height) + 1]; // y == 1
- else*/
- h = heights[x*h_height + y + 1];
+ h = heights[x*h_height + y + 1];
V = Vector3(x, h, y+1) - p;
N += U.cross(V);
// left
- /*if(x == h_width-1)
- h = left[h_height + y]; // x == 1
- else*/
- h = heights[(x+1)*h_height + y];
+ h = heights[(x+1)*h_height + y];
U = Vector3(x+1, h, y) - p;
//down
- /*if(y == 0)
- h = down[x*(int)(h_height) + chunk_size - 1];
- else*/
- h = heights[x*h_height + y - 1];
+ h = heights[x*h_height + y - 1];
V = Vector3(x, h, y-1) - p;
N += U.cross(V);
// up
- /*if(y == h_height-1)
- h = up[x*(int)(h_height) + 1]; // y == 1
- else*/
- h = heights[x*h_height + y + 1];
+ h = heights[x*h_height + y + 1];
V = Vector3(x, h, y+1) - p;
N += V.cross(U);
@@ -348,8 +311,6 @@ void Terrain::Chunk::calc_normals() {
normals[(x-1)*n_height + y - 1] = N;
}
}
-
- need_normals = false;
}
Terrain::Terrain() {
@@ -465,9 +426,6 @@ void Terrain::update(float x, float z) {
if(chunk->distance(x, z) > chunk_dist_threshold) {
delete *it;
it = chunks.erase(it);
- } else if((*it)->need_normals) {
- chunk->calc_normals();
- chunk->make_vbo();
}
}