Spaces:
Sleeping
Sleeping
File size: 4,254 Bytes
b4c8bc3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import numpy as np
import pytest
import trimesh
from pyrender import (Mesh, Primitive)
def test_meshes():
with pytest.raises(TypeError):
x = Mesh()
with pytest.raises(TypeError):
x = Primitive()
with pytest.raises(ValueError):
x = Primitive([], mode=10)
# Basics
x = Mesh([])
assert x.name is None
assert x.is_visible
assert x.weights is None
x.name = 'str'
# From Trimesh
x = Mesh.from_trimesh(trimesh.creation.box())
assert isinstance(x, Mesh)
assert len(x.primitives) == 1
assert x.is_visible
assert np.allclose(x.bounds, np.array([
[-0.5, -0.5, -0.5],
[0.5, 0.5, 0.5]
]))
assert np.allclose(x.centroid, np.zeros(3))
assert np.allclose(x.extents, np.ones(3))
assert np.allclose(x.scale, np.sqrt(3))
assert not x.is_transparent
# Test some primitive functions
x = x.primitives[0]
with pytest.raises(ValueError):
x.normals = np.zeros(10)
with pytest.raises(ValueError):
x.tangents = np.zeros(10)
with pytest.raises(ValueError):
x.texcoord_0 = np.zeros(10)
with pytest.raises(ValueError):
x.texcoord_1 = np.zeros(10)
with pytest.raises(TypeError):
x.material = np.zeros(10)
assert x.targets is None
assert np.allclose(x.bounds, np.array([
[-0.5, -0.5, -0.5],
[0.5, 0.5, 0.5]
]))
assert np.allclose(x.centroid, np.zeros(3))
assert np.allclose(x.extents, np.ones(3))
assert np.allclose(x.scale, np.sqrt(3))
x.material.baseColorFactor = np.array([0.0, 0.0, 0.0, 0.0])
assert x.is_transparent
# From two trimeshes
x = Mesh.from_trimesh([trimesh.creation.box(),
trimesh.creation.cylinder(radius=0.1, height=2.0)],
smooth=False)
assert isinstance(x, Mesh)
assert len(x.primitives) == 2
assert x.is_visible
assert np.allclose(x.bounds, np.array([
[-0.5, -0.5, -1.0],
[0.5, 0.5, 1.0]
]))
assert np.allclose(x.centroid, np.zeros(3))
assert np.allclose(x.extents, [1.0, 1.0, 2.0])
assert np.allclose(x.scale, np.sqrt(6))
assert not x.is_transparent
# From bad data
with pytest.raises(TypeError):
x = Mesh.from_trimesh(None)
# With instancing
poses = np.tile(np.eye(4), (5,1,1))
poses[:,0,3] = np.array([0,1,2,3,4])
x = Mesh.from_trimesh(trimesh.creation.box(), poses=poses)
assert np.allclose(x.bounds, np.array([
[-0.5, -0.5, -0.5],
[4.5, 0.5, 0.5]
]))
poses = np.eye(4)
x = Mesh.from_trimesh(trimesh.creation.box(), poses=poses)
poses = np.eye(3)
with pytest.raises(ValueError):
x = Mesh.from_trimesh(trimesh.creation.box(), poses=poses)
# From textured meshes
fm = trimesh.load('tests/data/fuze.obj')
x = Mesh.from_trimesh(fm)
assert isinstance(x, Mesh)
assert len(x.primitives) == 1
assert x.is_visible
assert not x.is_transparent
assert x.primitives[0].material.baseColorTexture is not None
x = Mesh.from_trimesh(fm, smooth=False)
fm.visual = fm.visual.to_color()
fm.visual.face_colors = np.array([1.0, 0.0, 0.0, 1.0])
x = Mesh.from_trimesh(fm, smooth=False)
with pytest.raises(ValueError):
x = Mesh.from_trimesh(fm, smooth=True)
fm.visual.vertex_colors = np.array([1.0, 0.0, 0.0, 0.5])
x = Mesh.from_trimesh(fm, smooth=False)
x = Mesh.from_trimesh(fm, smooth=True)
assert x.primitives[0].color_0 is not None
assert x.is_transparent
bm = trimesh.load('tests/data/WaterBottle.glb').dump()[0]
x = Mesh.from_trimesh(bm)
assert x.primitives[0].material.baseColorTexture is not None
assert x.primitives[0].material.emissiveTexture is not None
assert x.primitives[0].material.metallicRoughnessTexture is not None
# From point cloud
x = Mesh.from_points(fm.vertices)
# def test_duck():
# bm = trimesh.load('tests/data/Duck.glb').dump()[0]
# x = Mesh.from_trimesh(bm)
# assert x.primitives[0].material.baseColorTexture is not None
# pixel = x.primitives[0].material.baseColorTexture.source[100, 100]
# yellowish = np.array([1.0, 0.7411765, 0.0, 1.0])
# assert np.allclose(pixel, yellowish)
|