Praktikum Augmentierte Bildsynthese mit Photon Mapping Interface Gruppe
Praktikum Augmentierte Bildsynthese mit Photon Mapping Interface Gruppe Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 1
Gliederung o Qt Allgemein o XML o CVS o Open. EXR Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 2
QT allgemein Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 3
Was ist Qt o C++ Klassen Bibliothek o GUI Toolkit o Für Unix und Windows o Quelle: www. trolltech. com Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 4
Interface Elemente/Buttons o Push Button o Check Box o Radio Button o Label o Tool Button o Button Group Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 5
Interface Elemente/Input o Scrollbar o Slider o Combo Box o Spin Box o Line Edit o Dial o LCDNumber o Pixmap. Label Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 6
Interface Elemente/Widgets Hello. World. cpp #include <qapplication. h> #include <qpushbutton. h> int main( int argc, char **argv) { QApplication my. Application (argc, argv); QPush. Button my. Push. Button („Hello World!“, 0); my. Push. Button. resize(100, 30); my. Application. set. Main. Widget( &my. Push. Button); my. Push. Button. show(); return my. Application. exec(); } Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 7
Signals & Slots o Kommunikation zwischen Objekten o Signale werden ausgelöst, wenn ein Event autritt Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 8
Interface Elemente/Widgets Hello. World. cpp #include <qapplication. h> #include <qpushbutton. h> int main( int argc, char **argv) { QApplication my. Application (argc, argv); QPush. Button my. Push. Button („Hello World!“, 0); my. Push. Button. resize(100, 3); my. Application. set. Main. Widget( &my. Push. Button); my. Push. Button. show(); QObject: : connect(&my. Push. Button, SIGNAL(clicked()), &my. Application, SLOT(quit()) ); return my. Application. exec(); } Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 9
Open. GL Anbindung #include <qgl. h> GLBox: : GLBox( QWidget* parent, const char* name) : QGLWidget( parent, name) { x. Rot = y. Rot = z. Rot = 0. 0; scale = 1. 0; local. Display. List = 0; } Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 10
Unser Interface? Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 11
XML Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 12
Gliederung o XML Allgemein o Aufbau einer XML-Datei o XML-Parser Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 13
XML Allgemein o Was ist XML? 1. Ein Informationscontainer „XML ist den allgegenwärtigen Plastikbehältern von Tupperware sehr ähnlich. “ (O‘Reilly) XML enthält, formt, benennt, strukturiert und schützt Informationen. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 14
XML Allgemein o Was ist XML? 2. Ein Werkzeugkasten für Markup-Sprachen XML ist keine Markup-Sprache, da kein festgelegtes Vokabular und keine festgelegte Grammatik existiert. XML legt ein Fundament aus syntaktischen Beschränkungen, anhand denen man sich eine eigene Sprache schaffen kann. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 15
XML Allgemein o Was ist XML? 3. Ein offener Standard wird nicht stillschweigend geändert und ist auch nicht an das Schicksal eines Unternehmens geknüpft. Spezifikation steht der Öffentlichkeit zur Verfügung (http: //www. w 3. org/TR/REC-xml) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 16
XML Allgemein o Was leistet XML? - Daten speichern und abrufen - Dokumente formatieren - In Präsentationsformate transformieren Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 17
Ein XML-File Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 18
Ein XML File o Typen von Tags in XML Leere Elemente <xref linkend="abc"/> Container Elemente <p>Das ist ein Absatz </p> Deklarationen <!ENTITY Autor="Name"> Verarbeitungsanweisungen <? druck-formatierer erzwinge-zeilenumbruch? > Kommentare <!---Kommentar---> CDATA-Abschnitte <![CDATA[Kaufmannsund. Reihe!&&&&&&]]> Entity-Referenzen Interface QT/XML/CVS &name Dennis Willkomm, Jens Freiling & Nils Sawade 19
XML Parser o Wie funktioniert ein Parser Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 20
XML Parser o Was macht ein Parser 1. Interne Prüfmechanismen (Ablegen auf Stacks) 2. Der Parser sucht nach Quellen von Entity-Referenzen und gliedert diese in das Dokument ein 3. Strukturprüfung (Validierung) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 21
XML Parser o Parser in Browsern Man kann XML-Files in Browsern anzeigen. Bis zu einem gewissen Grad werden Prüfungen durchgeführt. o Parser in Programmiersprachen Es gibt viele fertige API‘s, die man für seine Programme verwenden kann. Problem: XML ist stark auf Java ausgerichtet. Weniger Auswahlmöglichkeiten und Dokumentationen für C++. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 22
XML Parser o Was sollte ein Parser können? n SAX (Simple API for XML) n DOM (Document Objects Model) n DTD-Validierung Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 23
XML Parser o SAX Simple API for XML - erste und beliebteste Methode - XML Inhalt wird als Art Pipeline behandelt (Stream) - abhängig von einfachem Markup, das der Verarbeitungsreihenfolge entspricht - die Quelle der Dateien ist unwichtig (Datei oder Programmausgabe) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 24
XML Parser o DOM Document Object Model - Baummethode - Möglichkeit zu jedem Punkt zu gehen - mehr Ressourcen erforderlich Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 25
XML Parser o Unsere Auswahl (vorläufig) Xerces-C Unterstütz Java, C++, Perl API‘s: DTD-Validierung, SAX, DOM, Xerces Native Interface, XML Schema http: //xml. apache. org Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 26
CVS Concurrent Version System Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 27
CVS o Versionskontrollsystem n n Gleichzeitiges Arbeiten an Dateien (keine Locking. Mechanismen) Arbeitet mit Versionsnummer Verzeichnisbaumstruktur Ist in Client/Server aufgebaut o o Auf dem Server stehen die Projekte in Modulen in einem globalen Repository zur Verfügung. Die Benutzer haben eine Arbeitskopie des aktuellen Moduls auf ihrem eigenen Arbeitsbereich Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 28
Befehlsaufbau o Alle Kommandos werden als Parameter mit dem Programm cvs aufgerufen cvs [allg. optionen] Kommando [kommandooptionen] <dateinamen> o Die allg. Optionen sind nur einmal nötig, da sie von cvs im lokalen Modul abgespeichert werden (z. B. –d für den Repository-Pfad) der normale Aufruf sieht daher meist so aus: cvs Kommando [kommandooptionen] <dateinamen> Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 29
Repository Anlegen n Man benötigt hier die allg. Option - d <verzeichnis> um den Ort des Repository anzugeben cvs –d /usr/local/cvsroot init oder extern cvs –d : pserver: user@prakt. unikoblenz. de: /usr/local/cvsroot init mit dem Kommando init wird das Repository initialisiert pserver gibt die verwendete Zugriffsmethode an (es gibt noch andere z. B. via ssh, dies wird hier aber nicht behandelt) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 30
Module ins Repository anlegen n Als erstes wechselt man in das Verzeichnis, indem die Verzeichnisse/Daten liegen, die als Modul ins Repository importiert werden sollen cvs –d <verzeichnis> import –m <"Kommentar"> <modulname> <vendor-tag> <release-tag> Es werden nun alle Dateien/Verzeichnisse im Aktuellen Verzeichnis ins Modul <modulname> importiert. Mit –m wird ein Kommentar hinzugefügt. Die Tags am Schluß dienen „nur“ für die Verwaltung von CVS, sie sind daher beliebig wählbar. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 31
Auschecken von Modulen n Man wechselt in das gewünschte lokale Verzeichnis, in das Projekt als Arbeitskopie angelegt werden soll. o eventuell muss man sich vorher noch auf dem Server einloggen: cvs –d <Verzeichnis> login cvs –d <verzeichnis> checkout <modulname> oder kurz cvs –d <verzeichnis> co <modulname> Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 32
Arbeitskopie aktualisieren n Seine Arbeitskopie des Moduls auf den neusten Stand bringt man, indem man in den Projekt-Ordner wechselt und folgende Eingabe aufruft cvs update besser cvs update –d –A -d fügt auch neue Verzeichnisse hinzu -A löscht eventuelle Optionen vorherigen Updates Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 33
Update auf andere Versionen cvs update –D <"Datumsangabe"> n bringt die Arbeitskopie auf den „aktuellen“ Stand vom angegebenen Datum cvs update –r <version> oder <tagname> n bringt sie auf den Stand einer bestimmten Versionsnummer oder auf eine Version, die durch einen Tag markiert wurde (siehe auch Tagging) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 34
Dateien verändern n Bevor man eine Datei verändern kann, muss man es beim Repository anmelden cvs edit <dateiname> Jetzt kann man die Datei ändern. Damit die veränderte Datei ins Repository aufgenommen wird fehlt noch ein cvs commit –m <"Kommentar"> <dateiname> cvs unedit <dateiname> falls man die Datei doch nicht verändert will, werden eventuelle Änderungen rückgängig gemacht (edit und unedit wird bei uns nicht benötigt, es reicht veränderte Datei mit commit ins Reposity zu stellen) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 35
Mischen & Konflikte n n Wenn man eine veränderte Datei ins Repository überführen will, kann es sein, das sie schon in einer neueren Version, als die geänderte Datei, vorliegt. CVS gibt eine Warnung aus und übernimmt die Datei nicht ins Repository. Nun muss man, um seine Änderungen in die neue Version aufzunehmen, auf die neuste Version updaten. Hierbei mischt CVS die neuere globale Version mit der eigene lokalen Version zusammen. Läuft das Mischen konfliktfrei, so wird eine neue Version erstellt, die man nun ins Repository übertragen kann. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 36
Mischen & Konflikte n Treten aber beim Mischen Konflikte auf, so meldet das CVS und erstellt eine neue Datei, in der die Konflikte folgendermaßen gezeigt werden. . . <<<<<<< filename. . . lokaler Text. . . =======. . . globaler Text. . . >>>>>>> 1. 3. . . die Probleme müssen behoben werden und die Datei kann dann als neue Version ins Repository übermittelt werden. (die eigene Datei wird als #<dateiname> im Arbeitsverzeichnis abgesichert) Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 37
Datei & Verzeichnisse anlegen n Eine neue Textdatei/Verzeichnis, muss erst im/ins Project-Ordner erstellt/kopiert werden, nur dann kann sie in die eigene Arbeitskopie aufgenommen werden, das geht dann mit cvs add <dateiname> cvs add -kb <dateiname> (-kb wird bei Binärdateien benötigt, da sie nicht mit einander verglichen werden können) cvs add <verzeichnis> n Damit die Datei noch ins Repository aufgenommen wird, fehlt noch ein cvs commit –m <"Kommentar"> <dateiname> bei Verzeichnissen reicht das add Kommando aus. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 38
Löschen von Datein n Dateien, können aus der Arbeitskopie gelöscht werden mit cvs remove <dateiname> sie müssen dann noch physikalisch aus dem Arbeitverzeichnis gelöscht werden, das geht mit cvs remove –f <dateiname> auch in einem Schritt, mit cvs commit –m <"Kommentar"> <dateiname> werden sie auch aus dem Repository „gelöscht“, hier werden sie, damit vorherige Versionen wieder hergestellt werden können, aber nur als gelöscht markiert. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 39
Unterschiede in Dateien zeigen n Um die Unterschiede zwischen lokaler und globaler Fassung zu bestimmen, kann man den Aufruf cvs diff <dateiname> n verwenden. Mit der zusätzlichen Angabe von Versionsnummern lassen sich die Differenzen zwischen beliebigen Fassungen ausgeben cvs diff –r <Version 1> -r <Version 2> <dateiname> Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 40
Herausfinden, wer was gemacht hat cvs log <dateiname> n Bekommt man die Log-Datei ausgegeben, eine Übersicht aller Versionen der Datei/en mit den Kommentaren wird gezeigt cvs history <dateiname> n zeigt eine Datei mit allen Aktionen, die CVS bisher durchgeführt hat Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 41
Tagging n n CVS vergibt für jede Datei automatisch Versionsnummern. Dateien mit verschiedensten Versionen kann man zu einem Release zusammenstellen durch cvs tag <tagname> dadurch werden alle Dateien symbolisch zusätzlich mit diesen tagname versehen Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 42
GUI für CVS n z. B. Win. Cvs für Windows, Mac. Cvs für Mac und g. Cvs für Linux www. wincvs. org n Videos * Win. Cvs Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 43
CVS Quellen n CVS findet man unter www. cvshome. org n Nützliche Dokumente zu CVS o o www. cvshome. org/docs/manual/ cvsbook. red-bean. com/translations/german/ www. fido. de/kama/cvsmtp. html pi. informatik. unisiegen. de/kelter/lehre/04 w/uk 04 w/skripten. html Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 44
Open. EXR Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 45
Gliederung o HDR Images o Besonderheiten von Open. EXR o Die Open. EXR API o Beispiele für Open. EXR Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 46
HDR Images Das in der Natur vorhandene Helligkeitsspektrum unterscheidet sich stark von dem, das im Computer reproduzierbar ist. (totale Dunkelheit – Sonne) Darstellung auf Bildschirm / Foto subjektiv richtig, da die Augen selbst auch das Helligkeitsspektrum auf ein erträgliches Maß reduzieren. Helligkeitsbandbreite von normalen RGB-Bildern ist zu klein um eine 3 D-Szene realistisch auszuleuchten. Bei HDRI werden zu jedem Pixel auch dessen Energiewerte abgespeichert. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 47
HDR Images Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 48
HDR Images Formate von HDRI Die gebräuchlichsten sind Radiance. Files (. HDR /. RGBE). Eine neue Alternative ist das Open. EXR Format (. EXR) von Industrial Light and Magic. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 49
Besonderheiten von Open. EXR wurde speziell für die Anforderung im 3 D und Postproduktionsbereich entwickelt und kann neben HDRI auch Ebenen und Alphakanäle speichern. Durch eine leicht verminderte Dynamik (im Vergleich zu. HDR) wird die Dateigröße zwischen 30 und 50% reduziert. Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 50
Die Open. EXR API Auf www. openexr. com downloadbar. Erlaubt lesen / schreiben von. EXR in C++ Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 51
Open. EXR Beispiele Interface QT/XML/CVS Dennis Willkomm, Jens Freiling & Nils Sawade 52
- Slides: 52