개체를 카메라보기로 회전
Aug 20 2020
나는 이것을 가능한 한 명확하게하려고 노력한다.
출발점
장면의 중심 (0,0,0)에 개체를 배치합니다. 그런 다음 물체 주변의 반구에 고정 반경이 지정된 카메라를 배치하고 (Constraints를 사용하여 항상 물체를 바라 보도록) 이미지를 렌더링합니다. 이 다른 규칙을 사용하는 다른 라이브러리에서 열려면 개체를 y-up 및 minus-z-forward를 사용하여 .stl로 내 보냅니다.
문제
렌더링 된 이미지의 뷰에 해당하는 방식으로 개체를 회전하고 싶습니다.
접근하다
방위각과 고도에 대한 각도가 알려져 있습니다. 따라서 두 각도가 주어지면 회전 행렬을 계산합니다 (동종 회전 행렬이 필요하므로 0과 1을 추가합니다).
def angles_to_matrix(phi, theta):
# phi describes the azimuth
azi = phi
# theta describes the inclination angle, thus:
ele = radians(90) - theta
rol = 0
e1 = cos(rol) * cos(azi) - sin(rol) * cos(ele) * sin(azi)
e2 = sin(rol) * cos(azi) + cos(rol) * cos(ele) * sin(azi)
e3 = sin(ele) * sin(azi)
e4 = -cos(rol) * sin(azi) - sin(rol) * cos(ele) * cos(azi)
e5 = -sin(rol) * sin(azi) + cos(rol) * cos(ele) * cos(azi)
e6 = sin(ele) * cos(azi)
e7 = sin(rol) * sin(ele)
e8 = -cos(rol) * sin(ele)
e9 = cos(ele)
return np.array(((e1, e2, e3, 0), (e4, e5, e6, 0), (e7, e8, e9,0 ), (0, 0, 0, 1)))
회전이 제대로 보이지 않습니다. & 몇 가지 문제가있을 수 있다고 생각합니다.
- 축 방향 변경에 대해 놓친 것이 있습니까?
- 물체의 회전을 계산하기 위해 구 좌표를 계산하는 데 동일한 각도를 사용할 수도 있습니까?
아이디어가 있습니까?
답변
1 batFINGER Aug 25 2020 at 21:33
카메라에 개체 정렬
이렇게하면 카메라 뷰에 개체를 추가하고 ALIGN to VIEW
기본적으로 블렌더 오브젝트는 -Y를 향하고 Z가 위로 향합니다. 반면에 카메라는 Y를 위로하고 -Z를 내려다 봅니다.
객체 매트릭스를 위치, 회전 및 크기로 분해 한 다음 재구성 할 수 있습니다.
이 경우 카메라 매트릭스 세계의 회전 부분을 가져 와서 -Y 앞으로 및 Z 위로 변환 한 다음 원래 배율 및 변환을 사용하여 개체로 재구성합니다.
import bpy
from mathutils import Vector, Matrix
from bpy import context
from bpy_extras.io_utils import axis_conversion
scene = context.scene
cam_ob = scene.camera
ob = context.object
A = axis_conversion(
from_forward='Z',
from_up='-Y',
to_forward='Y',
to_up='Z').to_4x4()
loc, rot, scale = cam_ob.matrix_world.decompose()
ob.matrix_world = (
Matrix.Translation(ob.matrix_world.to_translation()) @
(rot.to_matrix().to_4x4() @ A) @
Matrix.Diagonal(ob.matrix_world.to_scale()).to_4x4()
)