예시: stl file

FileReader로 STL 파일 데이터를 읽음ArrayBuffer 형식으로 변환vtkSTLReader가 데이터를 받아서 3D 모델로 변환vtkSTLReader(STL → PolyData 변환)
- reader.getOutputPort() → STL 파일을 vtkPolyData로 변환하여 출력 normals.setInputConnection() → 법선 벡터를 계산하여 새로운 vtkPolyData를 생성
- STLReader가 데이터를 polyData로 변환할 때,
법선 계산이 없으면 표면이 각지고 어둡게 보이며 조명이 적용되지 않는 상태
법선 계산이 적용되면 표면이 부드럽고 자연스러운 조명 효과 적용.
vtkMapper(PolyData를 GPU가 이해할 수 있도록 변환, 무엇을 어떻게 보여줄지에 대한 처리자)
- vtkMapper는 vtkActor와 vtkPolyData를 연결하는 필수 요소
vtkActor (최종 화면에 출력되는 3D객체)
vtkRenderer (씬에 추가)
vtkRenderWindow (최종 화면 출력)
vtkPolyData (3D 모델 원본 데이터 = 기하학적 데이터): VTK: vtkPolyData Class Reference
↓
vtkMapper (PolyData → GPU용 데이터로 변환)
↓
vtkActor (위치, 색상, 조명 등 최종 설정)
↓
vtkRenderer (씬에 추가)
↓
vtkRenderWindow (최종 화면 출력)


VTK의 파이프라인 구조는 “분리된 단계들 간의 느슨한 결합(loose coupling)”과 “데이터 흐름 제어”를 중심 원칙으로 한다.
데이터는 상태를 공유하지 않고 흐른다.
각 컴포넌트는 자기 역할만 수행하고, 다음 단계에 위임한다.
컴포넌트 간의 연결은 인터페이스(input/output port)로만 이뤄짐.
데이터를 변환하거나 렌더링할 때, 진짜로 필요한 순간까지 계산을 미룬다. (예: render()를 호출하기 전까지는 어떤 계산도 실제로 일어나지 않음.)
각 파이프라인 단계는 단일 책임 원칙(SRP)을 따름.
- 예: STLReader는 “읽기”, Normals는 “법선 계산”, Mapper는 “GPU 렌더링 데이터 생성”만 한다.
이렇게 설계된 이유는,
만약 Actor가 PolyData를 직접 갖게 된다면?