Ich arbeite im Rahmen einer kleinen Hiwi Stelle nebenbei noch an einem Programm zur Visualisierung von 3D-Inhalten. Diese sollen natürlich nicht nur gezeigt werden, sondern blick- und positionsabhängig in einer sog. Szenen-Bündeln ähnlich einem Film, zusammengefügt werden können. Zu sehen ist auf dem Screenshot ein Editorwidget, ein GlWidget und zwei Widgets zur Navigation im Stream. Das Interessante ist, dass ich eine Verwaltungsklasse geschrieben habe, die jeden Frame bei Bedarf aus der Hd nachläd.
Das ist zwar recht langsam, aber reicht zur Bearbeitung aus. Anschließend kann man sich die Scenen als Screenshot aufnehmen. Zukünftig soll ich noch Ebenen im Bereich der Scenenbearbeitung implementieren...
Interessant ist evtl. noch, dass ich eine Bzip2 Kompression für die teilweise recht großen Scene-Dateien testweise implementiert habe. Ich war über die Einfachheit überrascht. Das untere Beispiel zeigt wie man binär in eine komprimierte Datei schreibt. Funktioniert wie gewohnt mit normalen Filedescriptoren^^
int bz2error;
/*
* BZIP2 Compression Fct. to save all Data
*/
// open the output file
FILE* out_file = fopen(filename.c_str(), "w");
if (0 == out_file) {
fclose(out_file);
return false;
}
BZFILE* out_bz2 = BZ2_bzWriteOpen(&bz2error, out_file, 1, 0, 30);
if (BZ_OK != bz2error) {
fclose(out_file);
return false;
}
// SAVE CAMERAS
// save number of elements in vector cameras (vector::size)
unsigned int cameras_size = cameras.size();
BZ2_bzWrite(&bz2error, out_bz2, &cameras_size, sizeof(unsigned int));
//save every cube in vector
if(cameras_size > 0)
BZ2_bzWrite(&bz2error, out_bz2, (void*)&cameras.at(0), sizeof(float)*cameras.size() );
// ...
// close out bzip2 stream and the file
unsigned int total_in, total_cmp; // how many bytes we read, and resulting compressed size
BZ2_bzWriteClose(&bz2error, out_bz2, 0, &total_in, &total_cmp);
fclose(out_file);
return true;