728x90
1.vtkTransform Internal Matrix
vtkTransform 의 내부 Matrix 의 동작 방식을 이해하기 위해서는 vtkTransform 의 상속 관계를 확인해야한다.
vtkTransform 을 내부적으로 vtkTransformConcatenation 클래스를 사용한다. 이를 통해 누적된 Matrix list 를 PreMultiply 또는 PostMultiply 를 기반으로 최종 행렬을 계산한다.
그런데, vtkTransform 에는 상속 클래스인 HomogeneousTransform 의 함수인 GetMatrix 함수가 있는데 이는 지금까지의 최종 행렬의 값을 갖고 있는 Matrix를 Update call 에 따라 업데이트하여 새로운 메모리에 할당하여 전달하고 있다.
따라서 이 함수를 통해 접근되는 Matrix의 경우는 Concatentation 의 동작 구조하고는 별개의 메모리 데이터로 동작한다.
그러므로 vtkTransform 객체에 외부에서 계산한 Matrix 로 업데이트가 필요하다면 SetMatrix를 이용해야하며, 혹여라도 GetMatrix().DeepCopy() 와 같은 stale 메모리 접근은 최종 행렬에 반영되지 않게 된다.
정리하면, vtkTransform을 사용할 때에는 GetMatrix는 데이터 결과 참조 값으로만 사용하되 입력으로는 사용하지 말자.
728x90
728x90