| | import numpy as np |
| | import pytest |
| | from trimesh import transformations |
| |
|
| | from pyrender import (DirectionalLight, PerspectiveCamera, Mesh, Node) |
| |
|
| |
|
| | def test_nodes(): |
| |
|
| | x = Node() |
| | assert x.name is None |
| | assert x.camera is None |
| | assert x.children == [] |
| | assert x.skin is None |
| | assert np.allclose(x.matrix, np.eye(4)) |
| | assert x.mesh is None |
| | assert np.allclose(x.rotation, [0,0,0,1]) |
| | assert np.allclose(x.scale, np.ones(3)) |
| | assert np.allclose(x.translation, np.zeros(3)) |
| | assert x.weights is None |
| | assert x.light is None |
| |
|
| | x.name = 'node' |
| |
|
| | |
| | c = PerspectiveCamera(yfov=2.0) |
| | m = Mesh([]) |
| | d = DirectionalLight() |
| | x.camera = c |
| | assert x.camera == c |
| | with pytest.raises(TypeError): |
| | x.camera = m |
| | x.camera = d |
| | x.camera = None |
| | x.mesh = m |
| | assert x.mesh == m |
| | with pytest.raises(TypeError): |
| | x.mesh = c |
| | x.mesh = d |
| | x.light = d |
| | assert x.light == d |
| | with pytest.raises(TypeError): |
| | x.light = m |
| | x.light = c |
| |
|
| | |
| | |
| | x = np.array([1.0, 0.0, 0.0]) |
| | y = np.array([0.0, 1.0, 0.0]) |
| | t = np.array([1.0, 2.0, 3.0]) |
| | s = np.array([0.5, 2.0, 1.0]) |
| |
|
| | Mx = transformations.rotation_matrix(np.pi / 2.0, x) |
| | qx = np.roll(transformations.quaternion_about_axis(np.pi / 2.0, x), -1) |
| | Mxt = Mx.copy() |
| | Mxt[:3,3] = t |
| | S = np.eye(4) |
| | S[:3,:3] = np.diag(s) |
| | Mxts = Mxt.dot(S) |
| |
|
| | My = transformations.rotation_matrix(np.pi / 2.0, y) |
| | qy = np.roll(transformations.quaternion_about_axis(np.pi / 2.0, y), -1) |
| | Myt = My.copy() |
| | Myt[:3,3] = t |
| |
|
| | x = Node(matrix=Mx) |
| | assert np.allclose(x.matrix, Mx) |
| | assert np.allclose(x.rotation, qx) |
| | assert np.allclose(x.translation, np.zeros(3)) |
| | assert np.allclose(x.scale, np.ones(3)) |
| |
|
| | x.matrix = My |
| | assert np.allclose(x.matrix, My) |
| | assert np.allclose(x.rotation, qy) |
| | assert np.allclose(x.translation, np.zeros(3)) |
| | assert np.allclose(x.scale, np.ones(3)) |
| | x.translation = t |
| | assert np.allclose(x.matrix, Myt) |
| | assert np.allclose(x.rotation, qy) |
| | x.rotation = qx |
| | assert np.allclose(x.matrix, Mxt) |
| | x.scale = s |
| | assert np.allclose(x.matrix, Mxts) |
| |
|
| | x = Node(matrix=Mxt) |
| | assert np.allclose(x.matrix, Mxt) |
| | assert np.allclose(x.rotation, qx) |
| | assert np.allclose(x.translation, t) |
| | assert np.allclose(x.scale, np.ones(3)) |
| |
|
| | x = Node(matrix=Mxts) |
| | assert np.allclose(x.matrix, Mxts) |
| | assert np.allclose(x.rotation, qx) |
| | assert np.allclose(x.translation, t) |
| | assert np.allclose(x.scale, s) |
| |
|
| | |
| | x.scale[0] = 0 |
| | assert np.allclose(x.scale[0], 0) |
| |
|
| | x.translation[0] = 0 |
| | assert np.allclose(x.translation[0], 0) |
| |
|
| | x.matrix = np.eye(4) |
| | x.matrix[0,0] = 500 |
| | assert x.matrix[0,0] == 1.0 |
| |
|
| | |
| | with pytest.raises(ValueError): |
| | x.matrix = 5 * np.eye(4) |
| | with pytest.raises(ValueError): |
| | x.matrix = np.eye(5) |
| | with pytest.raises(ValueError): |
| | x.matrix = np.eye(4).dot([5,1,1,1]) |
| | with pytest.raises(ValueError): |
| | x.rotation = np.array([1,2]) |
| | with pytest.raises(ValueError): |
| | x.rotation = np.array([1,2,3]) |
| | with pytest.raises(ValueError): |
| | x.rotation = np.array([1,2,3,4]) |
| | with pytest.raises(ValueError): |
| | x.translation = np.array([1,2,3,4]) |
| | with pytest.raises(ValueError): |
| | x.scale = np.array([1,2,3,4]) |
| |
|