mirror of
https://codeberg.org/icewind/vbsp.git
synced 2026-06-03 18:54:05 +02:00
fix displacements for non square surfaces
This commit is contained in:
parent
a73c2f6c1b
commit
8e2d634e12
1 changed files with 12 additions and 6 deletions
|
|
@ -232,18 +232,24 @@ impl<'a> Handle<'a, DisplacementInfo> {
|
||||||
|
|
||||||
corner_positions.rotate_left(start_index);
|
corner_positions.rotate_left(start_index);
|
||||||
|
|
||||||
let start_corner = corner_positions[0];
|
|
||||||
let step_scale = 1.0 / (steps as f32 - 1.0);
|
let step_scale = 1.0 / (steps as f32 - 1.0);
|
||||||
let x_dir = (corner_positions[3] - corner_positions[0]) * step_scale;
|
let edge_intervals = [
|
||||||
let y_dir = (corner_positions[1] - corner_positions[0]) * step_scale;
|
(corner_positions[1] - corner_positions[0]) * step_scale,
|
||||||
|
(corner_positions[2] - corner_positions[3]) * step_scale,
|
||||||
|
];
|
||||||
|
|
||||||
Some(
|
Some(
|
||||||
self.displacement_vertices()
|
self.displacement_vertices()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(move |(i, displacement)| {
|
.map(move |(i, displacement)| {
|
||||||
let x = (i % steps) as f32;
|
let y = (i % steps) as f32;
|
||||||
let y = (i / steps) as f32;
|
let x = (i / steps) as f32;
|
||||||
let base_pos = start_corner + (x_dir * x) + (y_dir * y);
|
let edge_positions = [
|
||||||
|
corner_positions[0] + edge_intervals[0] * x,
|
||||||
|
corner_positions[3] + edge_intervals[1] * x,
|
||||||
|
];
|
||||||
|
let segment_interval = (edge_positions[1] - edge_positions[0]) * step_scale;
|
||||||
|
let base_pos = edge_positions[0] + (segment_interval * y);
|
||||||
base_pos + displacement.displacement()
|
base_pos + displacement.displacement()
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue