VTK
3D 시각화 및 데이터 처리를 위한 라이브러리
VTK Obejct Model
1. Graphics : Rendering
2. Visualization : Generating graphic objects to represent the data
Source | Filter | Mapper | Actor | Renderer |
Visualization model | Visualization model + Graphics model |
Graphics model |
Demand-driven
VTK는 데이터가 변경되는 시점에 업데이트가 이뤄지는 것(Event-driven)이 아닌 모든 데이터가 처리를 완료하고 명령 요청을 한 시점에 한번에 업데이트를 진행한다
아래와 같은 순서로 시각화가 처리된다.
1. 데이터 입력
vtkReader 의 서브 클래스 등을 사용하여 모델 데이터를 가져와줌
또는 vtkPoints 와 vtkCellArray, vtkSource 등 그려줄 수 있는 클래스를 사용하여 데이터를 직접 그려줄 수 있음
2. 데이터 전처리
vtkFilter, vtkProperty 등 데이터를 분석 및 전처리(변환/축소)
3. Mapping
데이터를 그래픽 객체로 변환
vtkMapper 를 사용하여 SetInputConnection() 으로 연결
4. Actor
vtkActor, vtkVolume 등을 사용한 3D 객체
3D 객체의 위치, 크기, 각도, 색, 회전 ...
vtkLight, vtkCamera 등 활용
5. Renderer
렌더링 엔진
vtkRenderer 로 설정해주며 3D 객체를 렌더링
6. Windowing
vtkRenderWindow(= Scene) 와 vtkRenderWindowInteractor(= Viewer) 를 사용하여 그래픽 사용자 인터페이스 구현
위의 순서를 기반으로 아래의 코드처럼 작동하게 된다
colors = vtk.vtkNamedColors()
# 데이터 입력
points = vtk.vtkPoints()
points.InsertNextPoint(10, 10, 0)
points.InsertNextPoint(100, 100, 0)
points.InsertNextPoint(200, 200, 0)
polydata = vtk.vtkPolyData()
polydata.SetPoints(points)
# 데이터 전처리
glyphFilter = vtk.vtkVertexGlyphFilter()
glyphFilter.SetInputData(polydata)
glyphFilter.Update()
# Mapping
mapper = vtk.vtkPolyDataMapper2D()
mapper.SetInputConnection(glyphFilter.GetOutputPort())
mapper.Update()
# Actor
actor = vtk.vtkActor2D()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(colors.GetColor3d('Gold'))
actor.GetProperty().SetPointSize(8)
# Renderer 렌더링 엔진
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# Windowing, Scene
renderer.AddActor(actor)
renderWindow.SetSize(300, 300)
renderer.SetBackground(colors.GetColor3d('DarkSlateGray'))
renderWindow.SetWindowName('Actor2D')
# Render
renderWindow.Render()
# RenderWindow Interactor
renderWindowInteractor.Start()
'Ect. > Library' 카테고리의 다른 글
Swagger UI 세팅 (Feat. Nodejs) (1) | 2024.02.10 |
---|---|
VTK in python - VTK and Cylinder (0) | 2023.12.06 |
pynetdicom 의 storescu에 대해 (1) | 2023.10.08 |
pynetdicom 을 사용하여 DICOM Networking 시도 (1) | 2023.10.07 |
react-babylonjs 라이브러리 사용해보기 (1) | 2023.10.03 |