Shift chunks where they are supposed to be

This commit is contained in:
2022-10-22 21:19:58 +02:00
parent 655978efc2
commit e36ce58f75
3 changed files with 52 additions and 27 deletions
+11 -1
View File
@@ -73,9 +73,12 @@ fn main() {
in uint index; in uint index;
in float altitude; in float altitude;
in uvec2 chunk;
out vec2 v_tex_coords; out vec2 v_tex_coords;
const uint TILE_SIZE = 4u;
void main() { void main() {
uint index_mod = index % 6u; uint index_mod = index % 6u;
uint index_div = index / 6u; uint index_div = index / 6u;
@@ -99,7 +102,14 @@ fn main() {
x++; x++;
z++; z++;
} }
gl_Position = persp_matrix * view_matrix * vec4(vec3(x, altitude, z) * 0.005, 1.0);
x *= TILE_SIZE;
z *= TILE_SIZE;
x += chunk.x;
z += chunk.y;
gl_Position = persp_matrix * view_matrix * vec4(vec3(x, altitude, z), 1.0);
} }
", ",
+23 -21
View File
@@ -16,9 +16,9 @@ pub struct CameraState {
impl CameraState { impl CameraState {
pub fn new() -> CameraState { pub fn new() -> CameraState {
CameraState { CameraState {
aspect_ratio: 1024.0 / 768.0, aspect_ratio: 1_024.0 / 768.0,
position: (0.1, 0.1, 1.0),
// The second coordinate is for the altitude. // The second coordinate is for the altitude.
position: (3_646.41, 10.3622, 13_113.7),
direction: (0.0, 0.0, -1.0), direction: (0.0, 0.0, -1.0),
moving_up: false, moving_up: false,
moving_left: false, moving_left: false,
@@ -33,7 +33,7 @@ impl CameraState {
pub fn get_perspective(&self) -> [[f32; 4]; 4] { pub fn get_perspective(&self) -> [[f32; 4]; 4] {
let fov: f32 = 3.141592 / 2.0; let fov: f32 = 3.141592 / 2.0;
let zfar = 8000.0; let zfar = 53_209.0;
let znear = 0.01; let znear = 0.01;
let f = 1.0 / (fov / 2.0).tan(); let f = 1.0 / (fov / 2.0).tan();
@@ -118,40 +118,42 @@ impl CameraState {
s.0 * f.1 - s.1 * f.0, s.0 * f.1 - s.1 * f.0,
); );
const SPEED: f32 = 1.0; //0.01;
if self.moving_up { if self.moving_up {
self.position.0 += u.0 * 0.01; self.position.0 += u.0 * SPEED;
self.position.1 += u.1 * 0.01; self.position.1 += u.1 * SPEED;
self.position.2 += u.2 * 0.01; self.position.2 += u.2 * SPEED;
} }
if self.moving_left { if self.moving_left {
self.position.0 -= s.0 * 0.01; self.position.0 -= s.0 * SPEED;
self.position.1 -= s.1 * 0.01; self.position.1 -= s.1 * SPEED;
self.position.2 -= s.2 * 0.01; self.position.2 -= s.2 * SPEED;
} }
if self.moving_down { if self.moving_down {
self.position.0 -= u.0 * 0.01; self.position.0 -= u.0 * SPEED;
self.position.1 -= u.1 * 0.01; self.position.1 -= u.1 * SPEED;
self.position.2 -= u.2 * 0.01; self.position.2 -= u.2 * SPEED;
} }
if self.moving_right { if self.moving_right {
self.position.0 += s.0 * 0.01; self.position.0 += s.0 * SPEED;
self.position.1 += s.1 * 0.01; self.position.1 += s.1 * SPEED;
self.position.2 += s.2 * 0.01; self.position.2 += s.2 * SPEED;
} }
if self.moving_forward { if self.moving_forward {
self.position.0 += f.0 * 0.01; self.position.0 += f.0 * SPEED;
self.position.1 += f.1 * 0.01; self.position.1 += f.1 * SPEED;
self.position.2 += f.2 * 0.01; self.position.2 += f.2 * SPEED;
} }
if self.moving_backward { if self.moving_backward {
self.position.0 -= f.0 * 0.01; self.position.0 -= f.0 * SPEED;
self.position.1 -= f.1 * 0.01; self.position.1 -= f.1 * SPEED;
self.position.2 -= f.2 * 0.01; self.position.2 -= f.2 * SPEED;
} }
if self.rotate_left { if self.rotate_left {
+18 -5
View File
@@ -81,9 +81,10 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [f32; 3], normal: [f32; 3],
index: u32, index: u32,
biome: u32, biome: u32,
chunk: [u32; 2],
} }
implement_vertex!(Vertex, altitude, normal, index, biome); implement_vertex!(Vertex, altitude, normal, index, biome, chunk);
let mut vertex_data: Vec<Vertex> = Vec::new(); let mut vertex_data: Vec<Vertex> = Vec::new();
@@ -101,6 +102,14 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
.replace("Extensions/LemnosLife/Map/Altis/Ground/", "") .replace("Extensions/LemnosLife/Map/Altis/Ground/", "")
.replace(".height", ""); .replace(".height", "");
println!("{}", file_name); println!("{}", file_name);
let file_name_parts: Vec<&str> = file_name.split(' ').collect();
const CHUNK_SIZE: u32 = 1_000;
let chunk = [
file_name_parts[0].parse::<u32>().unwrap() * CHUNK_SIZE,
file_name_parts[1].parse::<u32>().unwrap() * CHUNK_SIZE,
];
// have deleted a few height files to make it work // have deleted a few height files to make it work
// TODO: use triangle strip // TODO: use triangle strip
let height_contents = fs::read_to_string(&format!( let height_contents = fs::read_to_string(&format!(
@@ -114,12 +123,10 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
file_name file_name
)) ))
.expect("Unable to load biomes file!"); .expect("Unable to load biomes file!");
println!("alpha");
let height_lines: Vec<&str> = height_contents.split('\n').collect(); let height_lines: Vec<&str> = height_contents.split('\n').rev().collect();
let biomes_lines: Vec<&str> = biomes_contents.split('\n').collect(); let biomes_lines: Vec<&str> = biomes_contents.split('\n').collect();
println!("beta");
let mut index: u32 = 0; let mut index: u32 = 0;
@@ -148,6 +155,7 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
@@ -156,6 +164,7 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
@@ -164,6 +173,7 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
@@ -174,6 +184,7 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
@@ -182,6 +193,7 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
@@ -190,13 +202,14 @@ pub fn load_ground(display: &Display) -> VertexBufferAny {
normal: [0.0, 0.0, 1.0], normal: [0.0, 0.0, 1.0],
index, index,
biome, biome,
chunk,
}); });
index += 1; index += 1;
} }
} }
i += 1; i += 1;
// i == 250 thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: BufferCreationError(OutOfMemory)', src/support/mod.rs:203:10 // i == 250 thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: BufferCreationError(OutOfMemory)', src/support/mod.rs:203:10
if i == 200 { if i == 175 {
break; break;
} }
} }