VTK 이론
VTK의 기본 객체
1) 데이터 객체
- vtkPolyData : 정점(vertex), 선(line), 다각형, 삼각형 스트립(triangle strip)으로 구성됨. 다각형 데이터의 위상과 형상은 불규칙적.
-
- vtkImageData : 직선 요소(line element) : 1D, 픽셀(pixel) : 2D, 복셀(voxel)
- 3D로 구성. 영상 데이터는 형상과 위상이 규칙적
- vtkStructuredGrid : 규칙적 위상과 불규칙적 형상을 가진 데이터 세트, 구조화 격자는 유한차분법 (finite difference analysis)에서 자주 사용됨.
-
- vtkUnstructureGrid : 위상과 형상이 모두
- 정형화되지 않음. VTK의 모든 데이터 세트 유형
- 은 비구조화 격자로 표현될 수 있음. 하지만, 이 데이터 세트는 메모리와 계산을 위한 자원을 가장 많이 필요로 하기 때문에 꼭 필요한 경우에만 사용하도록 함.
- 2) 처리 객체
- 소스, 필터, 매버로 나누어짐. 각 객체가 가시화를 시작하고, 관리하고, 종료하는 역할.
- 소스 객체 (vtkReader, vtkSphereSource) : 데이터를 외부에서 입력 받거나 새로 생성함으로써 준비되는 객체
- 필터 객체 (vtkContourFilter) : 필터 객체는 소스 객체 또는 이전 필터 객체의 결과물이 입력되어 새로운 결과물을 산출할 수 있도록 하는 객체.
- 매퍼 객체 (vtkPolyDataMapper) : 매퍼 객체는 소스 객체 혹은 필터 객체의 결과물을 렌더링할 수 있도록 연결함.
VTK 가시화 파이프 라인
1) VTK 렌더링 엔진
- vtkActor : 3차원 형상 데이터 표현.
- vtkVolume : 3차원 볼륨 데이터 표현.
- vtkActor2D : 2차원 데이터 표현. 4x4 변환행렬을 사용하지 않음.
- vtkAbstrctMapper : vtkActor 혹은 vtkVolume과 같은 객체는 입력 데이터를 위한 참조를 유지하거나 실제 렌더링 기능을 제공하기 위해 vtkAbstractMapper의 하위 클래스를 사용
- vtkProperty / vtkVolumeProperty : vtkProperty와 vtkVolumeProperty는 각각 vtkActor와 vtkVolume의 외관에 대한 속성을 정의
- vtkCamera : 장면을 바라보는 시점을 정의.
- vtkLight : 조명이 장면을 위해 계산될 때, 하나 또는 복수의 vtkLight 객체가 필요
- vtkRenderer : 준비된 장면을 렌더링하는 과정을 담당하며, 매퍼로부터 가시화할 대상체를 RenderWindow에 연결됨.
- vtkRenderWindow : 해당 PC의 운영 체제(operating system)와 VTK의 렌더링 엔진(rendering engine)을 연결
- vtkRenderWindowInteractor : 마우스, 키보드, 시간 이벤트 등의 입력을 처리하고 command/observe 디자인 패턴의 VTK 구현을 통해 이들을 전송하기 위한 클래스
- vtkTransform : 액터/볼륨, 조명, 카메라와 같이 위치를 지정해야 하는 장면의 많은 객체들은 쉽게 위치와 방향을 다루기 위한 vtkTransform 파라미터를 갖고 있음.
- vtkLookupTable, vtkColorTransferFunction, vtkPiecewiseFunction : 스칼라 데이터를 가시화 할 때, 값의 색상이나 투명도 맵핑을 정의하는 경우 vtkLookupTable. 볼륨렌더링은 vtkColorTransferFunction와 vtkPiecewiseFunction이 함께 이용.
2) VTK 가시화 파이프라인
가시화 파이프라인(visualization pipeline)은 화면에 디스플레이하고자 하는 데이터를 그래픽 데이터로 변환하는 일련의 과정
vtkStructuredPointsReader 소스를 통해 읽어 들인 “hydrogen.vtk” 파일은 먼저 vtkMarchingCubes라는 필터로 연결된다. vtkMarchingCubes를 통해 얻어진 삼각형 메시 데이터는 다시 vtkPolyDataMapper를 통해 vtkActor로 전달된다. 이후 vtkActor는 vtkRenderer에 연결되고, 최종적으로 사용자 입력을 처리하도록 하는 vtkRenderWindowInteractor와 함께 vtkRenderWindow로 연결되어 화면에 디스플레이된다.
액터가 렌더링 명령을 받으면, Update()명령이 가시화 파이프라인으로 거슬러 호출된다. 아래 그림에서 보인 것처럼Render()명령은 데이터의 가시화 명령을 내리고, 그 명령이 가시화 파이프라인으로 전달된다.