(horizontal_mean, vertical_mean, lookat_position, horizontal_stddev=0, vertical_stddev=0, radius=1, batch_size=1, device='cpu')
| 67 | |
| 68 | @staticmethod |
| 69 | def sample(horizontal_mean, vertical_mean, lookat_position, horizontal_stddev=0, vertical_stddev=0, radius=1, batch_size=1, device='cpu'): |
| 70 | h = torch.randn((batch_size, 1), device=device) * horizontal_stddev + horizontal_mean |
| 71 | v = torch.randn((batch_size, 1), device=device) * vertical_stddev + vertical_mean |
| 72 | v = torch.clamp(v, 1e-5, math.pi - 1e-5) |
| 73 | |
| 74 | theta = h |
| 75 | v = v / math.pi |
| 76 | phi = torch.arccos(1 - 2*v) |
| 77 | |
| 78 | camera_origins = torch.zeros((batch_size, 3), device=device) |
| 79 | |
| 80 | camera_origins[:, 0:1] = radius*torch.sin(phi) * torch.cos(math.pi-theta) |
| 81 | camera_origins[:, 2:3] = radius*torch.sin(phi) * torch.sin(math.pi-theta) |
| 82 | camera_origins[:, 1:2] = radius*torch.cos(phi) |
| 83 | |
| 84 | # forward_vectors = math_utils.normalize_vecs(-camera_origins) |
| 85 | forward_vectors = math_utils.normalize_vecs(lookat_position - camera_origins) |
| 86 | return create_cam2world_matrix(forward_vectors, camera_origins) |
| 87 | |
| 88 | class UniformCameraPoseSampler: |
| 89 | """ |
no test coverage detected