Skip to content

Commit 3e3eddf

Browse files
committed
Fixed perspective camera
1 parent 418fa04 commit 3e3eddf

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

src/sensors/perspective.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Perspective pinhole camera (:monosp:`perspective`)
5757
.. subfigend::
5858
:label: fig-perspective
5959
60-
This plugin implements a simple idealizied perspective camera model, which
60+
This plugin implements a simple idealized perspective camera model, which
6161
has an infinitely small aperture. This creates an infinite depth of field,
6262
i.e. no optical blurring occurs.
6363
@@ -161,7 +161,10 @@ class PerspectiveCamera final : public ProjectiveCamera<Float, Spectrum> {
161161
sample_wavelength<Float, Spectrum>(wavelength_sample);
162162
} else {
163163
std::tie(wavelengths, wav_weight) =
164-
m_srf->sample_spectrum(zero<SurfaceInteraction3f>(), wavelength_sample);
164+
m_srf->sample_spectrum(
165+
zero<SurfaceInteraction3f>(),
166+
math::sample_shifted<Wavelength>(wavelength_sample)
167+
);
165168
}
166169

167170
Ray3f ray;

src/sensors/tests/test_perspective.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,9 @@ def check_fov(camera, sample):
184184
}
185185

186186

187+
@pytest.mark.parametrize("ray_differential", [False, True])
187188
@pytest.mark.parametrize("srf", list(srf_dict.keys()))
188-
def test_srf(variant_scalar_spectral, srf):
189+
def test_srf(variant_scalar_spectral, ray_differential, srf):
189190
# Test the spectral response function specification feature
190191
from mitsuba.core.xml import load_dict
191192
from mitsuba.core import sample_shifted
@@ -201,13 +202,11 @@ def test_srf(variant_scalar_spectral, srf):
201202
wav_sample = 0.5
202203
pos_sample = [0.2, 0.6]
203204

204-
ray, spec_weight = camera.sample_ray_differential(
205-
time, wav_sample, pos_sample, 0)
205+
sample_func = camera.sample_ray_differential if ray_differential else camera.sample_ray
206+
ray, spec_weight = sample_func(time, wav_sample, pos_sample, 0)
206207

207208
# Importance sample wavelength and weight
208-
print(sample_shifted(wav_sample))
209209
wav, wav_weight = srf.sample_spectrum(SurfaceInteraction3f(), sample_shifted(wav_sample))
210-
print(wav)
211-
210+
212211
assert ek.allclose(ray.wavelengths, wav)
213212
assert ek.allclose(spec_weight, wav_weight)

0 commit comments

Comments
 (0)