제미니 답변 : 

transform.basis

Godot 엔진에서 Transform3D의 basis는 3D 공간에서의 회전크기(스케일) 정보를 담고 있는 Basis 타입의 멤버 변수입니다. Transform3D는 3D 노드의 위치, 회전, 크기를 모두 정의하는데, 이 중 회전과 크기만 basis가 담당하고, 위치는 origin이 담당합니다.


Basis의 구성

Basis는 3개의 Vector3 벡터로 이루어진 3x3 행렬입니다. 이 세 벡터는 각각 로컬 좌표계의 x, y, z 축을 나타냅니다.

  • x (또는 x_axis): 로컬 좌표계의 x축 방향과 스케일을 나타냅니다.
  • y (또는 y_axis): 로컬 좌표계의 y축 방향과 스케일을 나타냅니다.
  • z (또는 z_axis): 로컬 좌표계의 z축 방향과 스케일을 나타냅니다.

이 세 벡터는 서로 직교(orthogonal)하며, 이들의 길이(length)가 곧 노드의 크기(스케일)를 결정합니다. 노드가 회전하면 이 세 벡터의 방향이 함께 변합니다.


Basis의 활용

basis를 직접 조작하는 것은 주로 다음과 같은 경우에 사용됩니다.

  • 방향 벡터 구하기: 노드의 정면(-z축), 윗면(y축), 오른쪽(x축) 등 특정 방향을 월드 좌표계 기준으로 알고 싶을 때 basis의 각 축 벡터를 사용합니다.
  • GDScript
     
    var forward_vector = -transform.basis.z
    var right_vector = transform.basis.x
    
  • 회전 및 스케일 설정: basis를 직접 설정하여 노드의 회전과 스케일을 한 번에 변경할 수 있습니다. 예를 들어, x, y, z 축에 대한 회전 행렬을 생성하거나, 각 축의 스케일을 조정할 수 있습니다.
  • 좌표 변환: 로컬 좌표를 월드 좌표로, 또는 월드 좌표를 로컬 좌표로 변환할 때 사용됩니다.
    • 로컬 -> 월드: transform.basis.xform(local_vector) 또는 transform * local_vector
    • 월드 -> 로컬: transform.basis.inverse().xform(world_vector)

요약하자면, transform.basis는 3D 객체의 회전과 크기 정보를 담는 행렬이며, 로컬 좌표계의 방향을 월드 좌표계 기준으로 나타내는 데 유용하게 사용됩니다.

+ Recent posts