460 likes | 704 Views
V TK Architektūra. Vizualizavimo Sistemos. Paruošė: IG-08 grupės studentas Andrius Mikalajūnas. VTK: Kas tai yra?. VTK (Visualization Toolkit) – biblioteka arba įrankių rinkinys: Sukurta 1996 išėjusiai knygai papildyti bei iliustruoti, Plačiai naudojama atvirojo kodo programinė įranga:
E N D
VTK Architektūra Vizualizavimo Sistemos Paruošė: IG-08 grupės studentas Andrius Mikalajūnas
VTK: Kas tai yra? VTK (Visualization Toolkit) – biblioteka arba įrankių rinkinys: • Sukurta 1996 išėjusiai knygai papildyti bei iliustruoti, Plačiai naudojama atvirojo kodo programinė įranga: • Kompiuterinė grafika, • Vaizdų apdorojimas, • Vizualizavimas. Pakankamai aukštas abstrakcijos lygis. Parašyta C++, bet galima kviesti iš įvairių kalbų: • Java, • Python, • Tck/Tk. Universaliausia (daugiausia funkcijų) savo srityje: • Daugiaunei850 C++ kalbosklasių, • Tame tarpe virš 200 filtrų. Tvarkoma Kitware, Inc.
VTK: Kas tai yra? Pagrįsta OOD (Objektiškai Orientuotas Dizainas), tačiau • Nėra Multiple Inheritance, • Nėra Public Template Clases (meta-programavimo), todėl lengviau įvynioti į interpretacines scenarijų kalbas, • Bendra super klasė vtkObject, iš kurios išvedami visi kiti objektai, • Kitas New() metodas nei C++ kalboje paslepia aparatinę įrangą nuo vartotojo (atvaizdavimo programinė įranga, t.y. ją inkapsuliuojanti klasė, nustatoma vykdymo metu) ir dinamiškai krauna naujas sub-klases (optimizuotas). Atminties valdymas: • Įdiegtas Reference Counting ir atmintis išvaloma, kai jis lygus 0, • Patobulinta duomenų srauto paradigma, kai objektai išnaudoja OOD privalumus ir nesaugo kelių duomenų kopijų, o nuorodas į duomenis. Vizualizavimo algoritminės sekos vykdymą galima kontroliuoti iš GUI ar net interaktyvių widget pagalba: • Command/Observer strategija, • Kiekvienas filtras turi kelis pagrindinius įvykius: Start/Progress/End, kurių pagalba mes galim nustatyti kiek darbo įvykdyta.
VTK: Ką daro (vizualizavimas)? Standartiniai vizualizavimo algoritmai: • Skaliarinių laukų, • Vektorinių laukų, • Tenzorinių laukų. Daugiakampių skaičiaus mažinimas. Tinklo glodinimas. Automatinis jungčių (elementų) generavimas. Vaizdų apdorojimas. Geometrija gali išsaugoti formatais: • VRML, • X3D.
VTK: Ką daro (KG)? Paviršių atvaizdavimas. Tūrių atvaizdavimas: • Spindulių trasavimas programinėje įrangoje, • Tekstūrų žemėlapiai (2D) aparatinėje įrangoje, • Specializuotos aparatinės įrangos (VolumePro) tekstūrų žemėlapiai. Šviesos ir kamera. Tekstūros. Atvaizdžiai išsaugomi įvairiais formatais: • PNG, • JPG.
VTK: Algoritminė seka Source - nuskaito duomenis iš failo arba juos sugeneruoja. Mapper - iš duomenų suformuoja geometriją: • viduje permeta į OpenGL. Actor - reprezentuoja objektą su visom išvaizdos savybėm. Renderer - atlieka atvaizdavimą. Window - langas displėjuje ir jo parametrai. Interactor – sąveika su vartotoju arba interaktyvumas - vaizdo valdymas: • Klaviatūta, pele, • Joystick, trackball.
VTK: 7+1 pagrindiniai objektai (1) vtkRenderWindow– valdo langą displėjaus įtaise: • Nepriklauso nuo platformos, t.y. OS. • Gali atvaizduoti keli vtkRender objektai. • Lango dydis, pozicija, pavadinimas, gylis, double buffering. vtkRenderer– atlieka scenos atvaizdavimą: • Surenka vtkLight, vtkCamera, vtkActor informaciją. • Objektai vtkLight ir vtkCamera gali būti sukurti pagal nutylėjimą. • Privalo turėti nuorodą į vtkRenderWindowir vtkViewport, kur atvaizduos. vtkLight – šviesos šaltinio parametrai: • Begalinės šviesos (kryptis), taškinės (pozicija, kampas, silpnėjimas). vtkCamera – kameros parametrai: • Standartiniai parametrai: padėtis, fovea, kerpamosios plokštumos, “upvector”. • Papildomi: elevation, azimuth, zoom, roll. • Aukštasis pilotažas: stereo vaizdas.
VTK: KG algoritmas vtkRendererir vtkRenderWindow – sąsaja tarp grafinės mašinos ir kompiuterio langų sistemos: • vtkViewport – vtkWindow dalis, kurioje piešia vtkRenderer, • vtkRenderWindowInteractor – užtikrina sąsają su vartotoju, • keli vtkRender gali atvaizduoti į vieną vtkRenderWindow, nors galuima sukurti ir kelis vtkRenderWindow.
VTK: VTK sąveika su OpenGL VTK atvaizdavimas atliekamas žemo lygio programine įranga: • OpenGL – dažniausiai taikoma UNIX operacinėse sistemose.
VTK: 7+1 pagrindiniai objektai (2) vtkActor – reprezentuoja vizualizuojamus objektus: • Pozicija ir orientacija pasaulinėje koordinačių sistemoje (objektas vtkTransform), • Transformacijos gali būti sukurtos pagal nutylėjimą. • Savybės: spalva, spalvinimas ir t.t. (objektais vtkProperty), • Glaudžiai siejasi su, vtkMapper ir turi kelias klases, nusakančias objektų elgesį, • vtkAssembly palaiko aktorių hierarchiją, kai reikia koordinuoti transformacijas. • vtkFollower visada orientuotas į kamerą (labai tinka tekstui). vtkProperty – reprezentuoja aktoriaus išvaizdos savybes: • Spalvos, permatomumas, • Šviesos atspindėjimo komponentės (diffuse, specular), • wireframe ar solid. vtkMapper – sąsaja tarp KG ir vizualizavimo algoritmų: • Pagrindinis dalykas – reprezentuoti aktorių geometriją! • Keli aktoriai gali kreiptis sietis su vienu vtkMapper objektą, • Gali “sukurti” ir viršūnių spalvas. vtkScalarsToColors subklasės duomenis paverčia spalva: • vtkLookupTable – taikomas bendriems atvejams (vizualizacijos pagrindas), • vtkColorTransferFunctions – taikomas “Volume Rendering”.
VTK: vtkProp ir vtkActor vtkProp – bendriausia scenos objektų reprezentacija: • vtkProp3D – manipuliuojamos 3D ir turi bendrą 4x4 matricą, • vtkActor – tiesiogiai naudojama subklasė representuojanti objektą, • vtkActor2D – skirta 2D objektams (dažniausiai atvaizdžiams),
VTK: vtkProp ir vtkActor vtkProp– bendriausia scenos objektų reprezentacija: • vtkVolume – skirta objektams tūrio atvaizdavime. • vtkProperty – reprezentuoja vtkActor išvaizdos savybes, • vtkTransform – vidinis vtkActor ar vtkVolume objektas, turintis 4x4 matricą, kontroliuojančią objekto poziciją, mastelį, orientaciją.
VTK: interaktyvumas vtkRenderWindowInteractor – užtikrina sąveika su vartotoju. Atlieka vaizdo lange valdymą: • e ar q – išeiti, • r – keičia kameros parametrus. Palaiko įvairius įtaisus: • j – “joystick” režimas, • t – “trackball” režimas. Pagrindiniai reprezentacijos modeliai: • w – “wireframe” modelis, • s – “solid” modelis. Pagrindinės “Viewer” funkcijos, t.y. transformacijos: • but1 – posūkis, • but2 – poslinkis, • but3 – mastelis.
VTK: Vizualizavimo Algoritmas VTK vizualizacijos algoritmas sudarytas iš trijų operacijų: • Sources nuskaito duomenis iš išorinio šaltinio arba sugeneruoja juos pagal parametrus. • Filters apdoroja įvesties duomenų objektus ir gražina vieną ar kelis išvesties duomenų objektus į vizualizacijos tinklą. • Mappers duomenų objektus paverčia grafiniais primityvais ir pabaigia vizualizavimo algoritmą. Vizualizavimo algoritminės sekos pabaigoje sukuriami aktoriai. Aktoriai atvaizduojami KG algoritmine seka.
VTK: VTK vizualizavimo objektai VTK vizualizavimo algoritmo arba tinklo pagrindą sudaro: • Duomenų objektai – reprezentuoja duomenis (informaciją): • Pateikia metodus, kurie kuria, trina, modifikuoja informaciją, • Pateikia metodus, kurie skaičiuoja duomenų charakteristikas (min, max), • Kitu būdu informacija neprieinama (inkapsuliacija), • Duomenų objektai skirstomi pagal vidinę VTK duomenų struktūrą, nes skiriasi jų apdorojimo metodai ir efektyvumas. • Procesų objektai – apdoroja duomenis ir yra skirstomi į grupes: • Sourcesobjektai, • Filtersobjektai, • Mappersobjektai.
VTK: Duomenų objektai • vtkFieldData – klasė vidinei objektų reprezentacijai. Bendru atveju VTK duomenų objektai realizuoti kaip Arrays of Array. • vtkFieldData sudarytas iš vtkDataArray vienmačio masyvo, kur kiekvienas narys gali būti skirtingo tipo • Tik keli metodai tiesiogiai dirba su šios klasės objektais (duomenimis).
VTK: Duomenų objektai • Mazgai ir atributai dažniausiai reprezentuojami duomenų masyvais (Arrays). • vtkDataArray – abstrakti bazinė klasė iš kurios išvedamos konkrečių duomenų tipų subklasės. • Figūroje pavaizduota tik dalis VTK klasių.
VTK: Duomenų objektai • vtkFloatArray – realių skaičių vienmatis masyvas arba eilutė, taip vadinami contigous data arrays. • Turi ne tik vardą ar komponentų skaičių, bet ir atminties dydį. • Tai dinaminiai masyvai, todėl bet koks bandymas įrašyti duomenis už masyvo ribų, automatiškai kviečia Resize() metodą. • MaxId nurodo įrašytų duomenų pabaigą.
VTK: Duomenų srauto koncepcija VTK naudoja duomenų srauto koncepciją, kurios pagrindą sudaro: • vtkDataObject – bendriausias duomenų objektas, neturintis konkrečios informacijos, • vtkProcessObject – dirba su duomenų objektais, kurdami naujus duomenų objektus.
VTK: Reference Counting Nuorodos į objektus pakeitė daugkartinį saugojimą: • Reference Counting pagrįsta OOP, • Vidiniuose objektuose saugomos tik nuorodos, • Duomenys saugomi centralizuotai, • Nuorodos skaičiuojamos ir kai RefCount=0 duomenų objektas atlaisvinamas, • Efektyviai panaudojama atmintis!
VTK: Procesų objektai Procesų objektai – apdoroja duomenis ir yra skirstomi: • Sources neturi įvesties duomenų objektų, bet turi vieną ar kelis išvesties duomenų objektus • Filters turi vieną ar kelius įvesties duomenų objektus ir vieną ar kelis išvesties duomenų objektus. • Mappers – turi vieną ar kelius įvesties duomenų objektus, bet neturi išvesties duomenų objektų.
VTK: Procesų objektai Filtrai – dažniausiai sutinkami procesų objektai, sudaromi iš: • Algoritmų objektų, kurie apdoroja duomenų objektus ir informaciją. Paveldimi iš vtkAlgorithm. • Vykdymo objektų, kurie atsakingi už vykdymo valdymą. Jie pasako filtrui, kada dirbti ir kokius duomenis ar informaciją apdoroti. Paveldimi iš vtkExecutive. • Objektai tampa visiškai savarankiškais!
VTK: Procesų objektai Procesų objektai (tame tarpe ir filtrai) bendrauja per portus: • Portas atitinka vieną filtro loginę įvestį (išvestį), • Tiek įvesties (Input port), tiek ir išvesties (OutputPort) portų gali būti keletas, • Porte saugoma: • Duomenys, t.y. objektas išvestas iš vtkDataObject, • Sekos informacija, objektas išvestas iš vtkInformation. • Duomenų objektai atskirti nuo porto, todėl iš anksto nereikia žinoti jų tipo.
VTK: Informacijos objektai Realizuoti heterogeniniais žemėlapiais, saugo įvairaus tipo informaciją: • Sekos informacijos objektai saugo info apie sekos vykdymą. Saugomi vtkExecutive objektuose. Pasiekiami vtkExecutive:GetOutputInformation(). • Porto informacijos objektai saugo info apie porto duopmenų tipą. Saugomi vtkAlgorithm objektuose. Pasiekiami vtkAlgorithm:GetInputPortInformation(). • Užklausos informacijos objektai saugo užklausos parametrus. Perduodami ProcessRequest() metodais. • Duomenų informacijos objektai saugo info apie duomenų objektą vtkDataObject. Pasiekiami vtkDataObject:GetInformation() metodu. • Algoritmo informacijos objektai saugo info apie algoritmo objektą vtkAlgorithm. Pasiekiami vtkAlgorithm:GetInformation() metodu.
VTK: Sekos vykdymo modelis Užklausa (Request) yra pagrindinė sekos atnaujinimo priemonė: • Užklausas generuoja filtrų vykdytojai Executive, • Užklausos realizuotos kaip informacijos objektai, • Keliauja per seką Executive objektų metodų ProcessRequest() pagalba. • Vykdomos Algorithm objektų metodu ProcessRequest() pagalba. • Užtikrinama algoritmų ir vykdytojų nepriklausomybė.
VTK: Sources VTK Sources objektaiskirstomiį dvi kategorijas: • Reader objektai nuskaito duomenis iš išorinio šaltinio ir konvertuoja į vidinį formatą, • Procedural objektai generuoja duomenis pagal parametrus. Teoriškai, Sources objektai gali dirbti su išoriniais įrenginiais ar programomis: • Nuskaityti matavimų duomenis iš matavimų eksperimentinės įrangos. • Nuskaityti skaitinius duomenis iš modeliavimo programinės įrangos.
VTK:Sources • VTK naudoja duomenų srauto koncepciją, kurios pagrindą sudaro: • vtkDataObject – bendriausias duomenų objektas, • vtkProcessObject – taip vadinami filtrai, dirba su duomenų objektais, kurdami naujus duomenų objektus.
VTK: Filters VTK filtraiskirstomiį dvi kategorijas: • Imaging filtrai, • Vizualizacijos filtrai. Vizualizacijos filtrus galima skirstyti pagal įvesties parametrus: • Filtruoja vtkDataSet, • Filtruoja vtkPointSet, • Filtruoja vtkPolyData (juos gali filtruoti ir vtkDataSet bei vtkPointSet filtrai), • Filtruoja vtkStructuredGrid (juos gali filtruoti ir vtkDataSet bei vtkPointSet filtrai), • Filtruoja vtkRectilinearGrid (juos gali filtruoti ir vtkDataSet filtrai), • Filtruoja vtkUnstructuredGrid (juos gali filtruoti ir vtkDataSet filtrai).
VTK: Mappers • VTK mapperiaiskirstomiį dvi kategorijas: • vtkAbstraktMapper – duomenis paverčia geometrija, kuri atvaizduojama ekrane, • vtkWriter – įrašo duomenis į failą, • vtkDatasetMapper – dirba su visomis Dataset, • vtkImageMapper – dirba su atvaizdžiais, • vtkLabeledDataMapper – generuoja duomenims 3D tekstines žymes, • vtkPolyDataMapper – dirba su daugiakampiais, • vtkPolyDataMapper2D – piešia vtkPolyData ant plokštumos, • vtkTextMapper – piešia 2D tekstines anotacijas, • vtkVolumeProMapper – VolumePro aparatinės įrangos pagalba dirba su tūriais, • vtkVolumeRayCastMapper – spindulių trasavimo metodu dirba su tūriais, • vtkVolumeTextureMapper2D – 2D tekstūrų pagalba dirba su tūriais.
VTK: Dataset VTK duomenys yra organizuojami į formalias struktūras Dataset: • vtkDataset – klasė, tvarkanti formalizuotus duomenis,
VTK:Dataset • vtkSructuredGrid – aprašo strukturizuotus duomenis. • vtkStructuredGrid būtinai reikia visos informacijos apie mazgus, todėl jis išvedamas iš vtkPointSet.
VTK:Dataset Nestruktūriniai mazgai tvarkomi klasėmis: • vtkPolyData – daugiakampių duomenys (kaip OpenGL), • vtkUnstructuredGrid – nestruktūriniai tinklai iš įvairių elementų, • “Unstructured points” klasės nėra, jie tvarkomi su vtkPolyData.
VTK:vtkCell • vtkCell – bazinė visų elementų klasė, • vtkNonLinearCell – bazinė netiesinių elementų klasė, • vtkNonLinearCell – bazinė 3D elementų klasė.
VTK:vtkCell vtkGenericCell – gali reprezentuoti bet kurį elementą. Elementai apibrėžiami sutvarkytu taškų sąrašu. VTK palaiko daug celių/elementų tipų: • 0D – VTK_VERTEX, VTK_POLY_VERTEX, • 1D – VTK_LINE, VTK_POLY_LINE, • 2D – VTK_TRIANGLE, VTK_TRIANGLE_STRIP, VTK_POLYGON, VTK_PIXEL, VTK_QUAD, • 3D – VTK_TETRA, VTK_VOXEL, VTK_WEDGE, VTK_PYRAMID, VTK_HEXAHEDRON.
VTK:1D ir 2D elementai • VTK naudoja duomenų srauto koncepciją, kurios pagrindą sudaro: • vtkDataObject – bendriausias duomenų objektas, • vtkProcessObject – taip vadinami filtrai, dirba su duomenų objektais, kurdami naujus duomenų objektus.
VTK:Atributai VTK palaikomi atributai priskiriami taškams arba elementams pagal Dataset modelį. vtkDataSetAttributes – bazinė atributų klasė: • Koordinuoja duomenų judėjimą iš vieno proceso objekto į kitą ir apdorojimą, • SetScalars() metodas parodo kurį lauko masyvą traktuoti kaip skaliarą. vtkPointData ir vtkCellData – subklasės konkretiems atributams.
VTK:Atributai VTK palaikomi atributai (tiek taškams, tiek elementams): • Scalar – nuo 1 iki 4 skaliarų, • Normal – vienetinio ilgio vektorius, • Vector – nestruktūriniai tinklai iš įvairių elementų,
VTK:Atributai VTK palaikomi atributai (tiek taškams, tiek elementams): • Tensor – 3x3 tenzorius, • Texture coordinate – 2D ar 3D indeksai į tekstūros žemėlapį, • VTK Field Data – bendriausias atributas.
VTK: Dideli duomenų kiekiai Data streaming koncepcija, kuri leidžia duomenis į atmintį krauti ir apdoroti dalimis: • Valdoma trimis etapais: • UpdateInformation() – pirminė informacija, • UpdateExtents() – nustatomas atminties dydis ir išskiriama atmintis, • UpdateData() – atliekamas duomenų apdorojimas. • Viskas atliekama automatiškai. • Ši technologija tiesiogiai taikoma lygiagretiems skaičiavimams. Lygiagretūs skaičiavimai leidžia uždavinį spręsti keliais procesoriais: • SMP kompiuteriuose taikoma Multi-threading technologija, • Paskirstytos atminties kompiuterių klasteriuose taikoma MPI biblioteka, • Atliekama TriggerAsynchronousUpdate() pagalba. VTK pagrindu sukurtas galutinis vartotojo paketas ParaView, skirtas dideliems duomenų kiekiams vizualizuoti:
VTK: Išvados Lengvai kuriamos grafinės aplikacijos: • OOD – lengva kurti naujas klases, Atvirojo kodo programa palaikoma programavimo įrankių: • Gerai ištestuota ir turi gausybę vartotojų, • Kompiliavimas, atliekamas su CMake, nepriklauso nuo platformos, • Testavimas atliekamas DART aplinkoje, • Dokumentacija saugoma klasių header’iuose, o Doxygen automatiškai generuoja HTML man puslapius, • Turi komercinį palaikymą (Kitware, Inc.). Įdiegta daugybė modernių algoritmų. Vizualizavimo “mašina” nėra labai greita: • Portabilumas (tinka daugeliui platformų), • C++ dynamic bindings. Plati klasių hierarchija – sunku pradėti mokytis.