MCPcopy Create free account
hub / github.com/apple/ml-sharp / create_camera_matrix

Function create_camera_matrix

src/sharp/utils/camera.py:233–268  ·  view source on GitHub ↗

Create camera matrix from vectors.

(
    position: torch.Tensor,
    look_at_position: torch.Tensor | None = None,
    world_up: torch.Tensor | None = None,
    inverse: bool = False,
)

Source from the content-addressed store, hash-verified

231
232
233def create_camera_matrix(
234 position: torch.Tensor,
235 look_at_position: torch.Tensor | None = None,
236 world_up: torch.Tensor | None = None,
237 inverse: bool = False,
238) -> torch.Tensor:
239 """Create camera matrix from vectors."""
240 device = position.device
241
242 if look_at_position is None:
243 look_at_position = torch.zeros(3, device=device)
244 if world_up is None:
245 world_up = torch.tensor([0.0, 0.0, 1.0], device=device)
246
247 position, look_at_position, world_up = torch.broadcast_tensors(
248 position, look_at_position, world_up
249 )
250
251 camera_front = look_at_position - position
252 camera_front = camera_front / camera_front.norm(dim=-1, keepdim=True)
253
254 camera_right = torch.cross(camera_front, world_up, dim=-1)
255 camera_right = camera_right / camera_right.norm(dim=-1, keepdim=True)
256
257 camera_down = torch.cross(camera_front, camera_right, dim=-1)
258 rotation_matrix = torch.stack([camera_right, camera_down, camera_front], dim=-1)
259
260 matrix = eyes(dim=4, shape=position.shape[:-1], device=device)
261 if inverse:
262 matrix[..., :3, :3] = rotation_matrix.transpose(-1, -2)
263 matrix[..., :3, 3:4] = -rotation_matrix.transpose(-1, -2) @ position[..., None]
264 else:
265 matrix[..., :3, :3] = rotation_matrix
266 matrix[..., :3, 3] = position
267
268 return matrix
269
270
271class PinholeCameraModel:

Callers 1

computeMethod · 0.85

Calls 1

eyesFunction · 0.85

Tested by

no test coverage detected