mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-12-20 22:30:35 +08:00
Fix look_at corner case
Summary: When the camera is vertically oriented, calculating the look_at x-axis (also known as the "right" vector) does not succeed, resulting in the x-axis being placed at the origin. Adds a check to correctly calculate the x-axis if this case occurs. Reviewed By: nikhilaravi, sbranson Differential Revision: D23511859 fbshipit-source-id: ee5145cdbecdbe2f7c7d288588bd0899480cb327
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f8ea5906c0
commit
eb517dd70b
@@ -1226,6 +1226,12 @@ def look_at_rotation(
|
||||
z_axis = F.normalize(at - camera_position, eps=1e-5)
|
||||
x_axis = F.normalize(torch.cross(up, z_axis, dim=1), eps=1e-5)
|
||||
y_axis = F.normalize(torch.cross(z_axis, x_axis, dim=1), eps=1e-5)
|
||||
is_close = torch.isclose(x_axis, torch.tensor(0.0), atol=5e-3).all(
|
||||
dim=1, keepdim=True
|
||||
)
|
||||
if is_close.any():
|
||||
replacement = F.normalize(torch.cross(y_axis, z_axis, dim=1), eps=1e-5)
|
||||
x_axis = torch.where(is_close, replacement, x_axis)
|
||||
R = torch.cat((x_axis[:, None, :], y_axis[:, None, :], z_axis[:, None, :]), dim=1)
|
||||
return R.transpose(1, 2)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user