The Visualization Toolkit (VTK) is an open-source, freely available software system for 3D computer graphics, modeling, image processing, volume rendering, scientific visualization, and information visualization. VTK also includes ancillary support for 3D interaction widgets, two- and three-dimensional annotation, and parallel computing. At its core, VTK is implemented as a C++ toolkit, requiring users to build applications by combining various objects into an application. The system also supports automated wrapping of the C++ core into Python, Java, and Tcl, so VTK applications may also be written using these interpreted programming languages.
vtk 설치법
c++의 경우 대부분의 오픈소스가 그렇듯이, 소스코드를 다운로드 받고, 소스코드에 대해 camke를 이용해 프로젝트를 생성해서 직접 바이너리 파일(.lib, .dll 파일)을 컴파일하면 된다.
vtk 이해
직관적인 vtk 파이프라인 구조 때문에, 아무리 설명을 읽어봤자, 사실 직접 예제를 컴파일해가면서 몇번 따라하는것만 못하다. 그럼에도 불구하고 궂이 파이라인 개념에 대한 설명을 읽자면, 내가 본 자료 중에선 아래 링크가 가장 쉽게 이해가 되었다.
우선 프로젝트를 만들어야 한다.
예제코드 밑의 'here to download cylinder'에서 소스코드를 다운받고, cmake를 이용해 프로젝트를 생성하면 된다. 소스코드를 읽어보면 다음과 같다.
vtkCylinderSource 객체로부터 실린더에 해당하는 형상정보(버텍스, 폴리곤등)을 가져온다.
실린더 형상의 속성을 default값으로부터 변경할 수 있다.
해당 예제에서는 Filter가 생략되고 바로 source로부터 Mapper로 바로 파이프가 연결되었다. 마지막으로 mapper는 actor로 연결된다.
Renderer 상에 등록되는 actor는 말그대로 배우처럼 화면에 출력되는 object가 된다. 동일한 mapper를 참조하는 여러개의 actor를 생성하여 renderer에 등록(소스코드 addactor)하면 동일한 형상의 actor 여러개를 동시에 화면에 띄우게 가능하고, 이미 등록되어 화면에 출력중인 실린더actor에 대해 setmapper함수를 다시 호출하여 박스로 형상을 바꾸는것도 가능하다.
http://www.vtk.org/Wiki/VTK/Examples/Cxx/에서 필요한 예제들을 몇번 따라하고 읽어보면, 이해하는데는 큰 어려움은 없다.
vtkSmartPointer가 이해가 안간다면 smart pointer에 대해 찾아보면 된다. 결론부터 말하자면 new, delete 를 자동화해 메모리 누수를 예방한다.
actor는 강력한 기능이지만 그만큼 코스트가 많이 요구된다. 예를 들어 만개의 sampling 점집합을 만개의 radius 1짜리 spherer actor로 출력하는것보단 만개의 point로 이루어진 1개의 actor로 출력하는 쪽이 훨씬 합리적이다.
나는 개인적으로 QVtkWidget내의 renderer에 actor들을 등록해 출력하는쪽을 선호한다. Qt가 제공하는 UI 추가가 훨씬 쉽기 때문에.
No comments:
Post a Comment