Skip to content

Commit 23df87e

Browse files
committed
Correct for clockwise vs. counter clockwise computation of dp{du,dv}
1 parent 4342d43 commit 23df87e

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

.DS_Store

0 Bytes
Binary file not shown.

src/scene.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,37 @@ impl Scene {
228228
let material = self.get_material(fragment.material);
229229
let surface = material.compute_surface_properties(self, ray, &fragment);
230230

231-
if false {
232-
return ((fragment.normal + Vector::splat(1.0)) * 0.5, collision.distance);
231+
match 0 {
232+
1 => {
233+
return ((fragment.normal + Vector::splat(1.0)) * 0.5, collision.distance);
234+
}
235+
2 => {
236+
return ((fragment.true_normal + Vector::splat(1.0)) * 0.5, collision.distance);
237+
}
238+
3 => {
239+
return ((surface.normal + Vector::splat(1.0)) * 0.5, collision.distance);
240+
}
241+
4 => {
242+
let uv = fragment.uv;
243+
return (
244+
(Vector::vector(uv.0, uv.1, 0.0) + Vector::splat(1.0)) * 0.5,
245+
collision.distance,
246+
);
247+
}
248+
5 => {
249+
return ((fragment.dpdu + Vector::splat(1.0)) * 0.5, collision.distance);
250+
}
251+
6 => {
252+
return ((fragment.dpdv + Vector::splat(1.0)) * 0.5, collision.distance);
253+
}
254+
7 => {
255+
return (
256+
Vector::vector(0.7, 0.7, 0.7) * surface.normal.dot(Vector::vector(1.0, 1.0, 0.0).normalize()).max(0.0),
257+
collision.distance,
258+
);
259+
}
260+
_ => {}
233261
}
234-
235262
// let ambient_colour = Vector::from(surface.ambient_colour);
236263
let mut diffuse_colour = Vector::from(surface.diffuse_colour);
237264
if let Some(emission) = surface.emissive_colour {

src/triangle.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,24 +118,24 @@ impl Shadable for Triangle {
118118

119119
let uv_edge0 = t1 - t0;
120120
let uv_edge1 = t2 - t0;
121-
let determinant = uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0;
121+
let determinant = (uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0).abs();
122122
if determinant == 0.0 {
123123
let uv_edge0 = t0 - t1;
124124
let uv_edge1 = t2 - t1;
125-
let determinant = uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0;
125+
let determinant = (uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0).abs();
126126
if determinant != 0. {
127127
let edge0 = -self.edges[0];
128128
let edge1 = self.edges[1] - self.edges[0];
129-
dpdu = ((uv_edge1.1 * edge0 - uv_edge0.1 * edge1) * (1.0 / determinant)).normalize();
129+
dpdu = Vector::vector(0.0, 1.0, 0.0); //((uv_edge1.1 * edge0 - uv_edge0.1 * edge1) * (1.0 / determinant)).normalize();
130130
dpdv = ((uv_edge0.0 * edge1 - uv_edge1.0 * edge0) * (1.0 / determinant)).normalize();
131131
} else {
132132
let uv_edge0 = t0 - t2;
133133
let uv_edge1 = t1 - t2;
134134
let edge0 = -self.edges[1];
135135
let edge1 = self.edges[0] - self.edges[1];
136-
let determinant = uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0;
136+
let determinant = (uv_edge0.0 * uv_edge1.1 - uv_edge0.1 * uv_edge1.0).abs();
137137
if determinant != 0.0 {
138-
dpdu = ((uv_edge1.1 * edge0 - uv_edge0.1 * edge1) * (1.0 / determinant)).normalize();
138+
dpdu = Vector::vector(1.0, 0.0, 0.0); //((uv_edge1.1 * edge0 - uv_edge0.1 * edge1) * (1.0 / determinant)).normalize();
139139
dpdv = ((uv_edge0.0 * edge1 - uv_edge1.0 * edge0) * (1.0 / determinant)).normalize();
140140
}
141141
}

0 commit comments

Comments
 (0)