|
import numpy as np |
|
import pytest |
|
|
|
from pyrender import (DirectionalLight, SpotLight, PointLight, Texture, |
|
PerspectiveCamera, OrthographicCamera) |
|
from pyrender.constants import SHADOW_TEX_SZ |
|
|
|
|
|
def test_directional_light(): |
|
|
|
d = DirectionalLight() |
|
assert d.name is None |
|
assert np.all(d.color == 1.0) |
|
assert d.intensity == 1.0 |
|
|
|
d.name = 'direc' |
|
with pytest.raises(ValueError): |
|
d.color = None |
|
with pytest.raises(TypeError): |
|
d.intensity = None |
|
|
|
d = DirectionalLight(color=[0.0, 0.0, 0.0]) |
|
assert np.all(d.color == 0.0) |
|
|
|
d._generate_shadow_texture() |
|
st = d.shadow_texture |
|
assert isinstance(st, Texture) |
|
assert st.width == st.height == SHADOW_TEX_SZ |
|
|
|
sc = d._get_shadow_camera(scene_scale=5.0) |
|
assert isinstance(sc, OrthographicCamera) |
|
assert sc.xmag == sc.ymag == 5.0 |
|
assert sc.znear == 0.01 * 5.0 |
|
assert sc.zfar == 10 * 5.0 |
|
|
|
|
|
def test_spot_light(): |
|
|
|
s = SpotLight() |
|
assert s.name is None |
|
assert np.all(s.color == 1.0) |
|
assert s.intensity == 1.0 |
|
assert s.innerConeAngle == 0.0 |
|
assert s.outerConeAngle == np.pi / 4.0 |
|
assert s.range is None |
|
|
|
with pytest.raises(ValueError): |
|
s.range = -1.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.range = 0.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.innerConeAngle = -1.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.innerConeAngle = np.pi / 3.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.outerConeAngle = -1.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.outerConeAngle = np.pi |
|
|
|
s.range = 5.0 |
|
s.outerConeAngle = np.pi / 2 - 0.05 |
|
s.innerConeAngle = np.pi / 3 |
|
s.innerConeAngle = 0.0 |
|
s.outerConeAngle = np.pi / 4.0 |
|
|
|
s._generate_shadow_texture() |
|
st = s.shadow_texture |
|
assert isinstance(st, Texture) |
|
assert st.width == st.height == SHADOW_TEX_SZ |
|
|
|
sc = s._get_shadow_camera(scene_scale=5.0) |
|
assert isinstance(sc, PerspectiveCamera) |
|
assert sc.znear == 0.01 * 5.0 |
|
assert sc.zfar == 10 * 5.0 |
|
assert sc.aspectRatio == 1.0 |
|
assert np.allclose(sc.yfov, np.pi / 16.0 * 9.0) |
|
|
|
|
|
def test_point_light(): |
|
|
|
s = PointLight() |
|
assert s.name is None |
|
assert np.all(s.color == 1.0) |
|
assert s.intensity == 1.0 |
|
assert s.range is None |
|
|
|
with pytest.raises(ValueError): |
|
s.range = -1.0 |
|
|
|
with pytest.raises(ValueError): |
|
s.range = 0.0 |
|
|
|
s.range = 5.0 |
|
|
|
with pytest.raises(NotImplementedError): |
|
s._generate_shadow_texture() |
|
|
|
with pytest.raises(NotImplementedError): |
|
s._get_shadow_camera(scene_scale=5.0) |
|
|