Labor:
Grafikprogrammierung / Graphische Datenverarbeitung

Begrenzte Teilnehmerzahl
Da nur eine begrenzte Anzahl an Arbeitsplätzen zur Verfügung steht,
werden dieses Jahr die Anmeldungen im StudIP individuell freigeschaltet.
Details zur Vergabe der Laborplätze können Sie folgender PDF-Datei entnehmen: Übungsblatt 0

Wochenstunden:

1 Vorlesung +Blockzeiten
Prüfungsart:Laborübung
Frequenz:jährlich (Sommersemester)
Credit Points:6, unbenotet

Zielsetzung

Ziel die­ses Kur­ses ist es, den Auf­bau mo­der­ner Gra­fik­hard­ware (wie z.B. ak­tu­el­ler Ge­Force/Ra­de­on Gra­fik­kar­ten) ken­nen zu ler­nen und deren Funk­ti­ons­wei­se nach­zu­voll­zie­hen.

Im Rah­men die­ser Ver­an­stal­tung wird neben der di­rek­ten Ver­wen­dung der Gra­fik­kar­te durch die OpenGL Schnitt­stel­le auch ein ein­fa­cher Soft­ware-Ren­de­rer pro­gram­miert. Die­ser ist der Struk­tur einer mo­der­nen Gra­fik­pipe­line nach­emp­fun­den und er­mög­licht so einen Blick "Hin­ter die Ku­lis­sen" von z.B. Com­pu­ter­spie­len und ak­tu­el­ler Gra­fik­an­wen­dun­gen. Auch ak­tu­el­le Kon­zep­te, wie Shader­pro­gram­mie­rung und vi­su­el­le Ef­fek­te, sind in­te­gra­ler Be­stand­teil die­ses Kur­ses.

Die Ab­ga­ben des La­bors wer­den in C++ pro­gram­miert. Um auch Pro­gram­mier­an­fän­gern (so­li­de Ja­va-Kennt­nis­se sind den­noch Vor­aus­set­zung) ge­recht zu wer­den, wird ein Frame­work be­reit­ge­stellt, wel­ches Auf­ga­ben wie GUI-Pro­gram­mie­rung, Zei­chen­funk­tio­nen, Speicherverwaltung, etc. auf ein Mi­ni­mum re­du­ziert. 

Voraussetzungen

Auch wenn die Pro­gram­mie­rung in C++ er­folgt, sind solide Ja­va-Kennt­nis­se aus­rei­chend. Ma­te­ria­li­en für den schnel­len Ein­stieg in C++ wer­den bei Be­darf be­reit­ge­stellt. Durch das vor­ge­ge­be­ne Frame­work wird die Pro­gram­mie­rung wei­test­ge­hend auf die Im­ple­men­ta­ti­on einer vor­ge­ge­be­nen Klas­sen­struk­tur re­du­ziert. 

Emp­foh­len wird der Be­such der Vor­le­sung Gra­phi­sche Da­ten­ver­ar­bei­tung, in der die theo­re­ti­schen Grund­la­gen ei­ni­ger As­pek­te des zu im­ple­men­tie­ren­den Sys­tems er­klärt wer­den. Es wird davon aus­ge­gan­gen, dass die Teil­neh­mer über Grund­kennt­nis­se der li­nea­ren Al­ge­bra ver­fü­gen. 

Die Teil­neh­mer kön­nen in Klein­grup­pen (bis max. 2 Per­so­nen) zu­sam­men­ar­bei­ten und müs­sen am Ende des Se­mes­ters ein kom­plet­tes Pro­gramm ab­ge­ben und alle Pro­gramm­tei­le er­klä­ren kön­nen. Im zweiten Teil des Labors werden auch aufwändigere OpenGL Themen zur eigenständigen Bearbeitung vergeben. (Hier sind je nach Komplexität des Themas auch größere Gruppen möglich.)

Inhalte

 Der Kurs gliedert sich in zwei Teile:

Im ers­ten Teil wird auf die Grund­la­gen der 3D-Vi­sua­li­sie­rung ein­ge­gan­gen. Die Teil­neh­mer pro­gram­mie­ren Schritt für Schritt einen soft­ware­b­a­sier­ten Ren­de­rer, der be­lie­bi­ge Me­s­hes dar­stel­len kann. Das ver­wen­de­te PLY-For­mat er­mög­licht es den Teil­neh­mern mit Hilfe von Pro­gram­men wie Blen­der auch selbst krea­tiv zu wer­den.

Aus­ge­hend von einer ein­fa­chen Dar­stel­lung als Punkt­wol­ke wird das Pro­gramm nach und nach zu einem voll­wer­ti­gen Soft­ware­ren­de­rer aus­ge­baut. Die­ser um­fasst:

  • Fül­len von Drei­ecken
  • In­ter­po­la­ti­on von Farb­in­for­ma­tio­nen
  • Ein­fa­che Tex­t­u­rie­rung
  • Ver­schie­de­ne Be­leuch­tungs­mo­del­le wie Flat-/ Gour­aud- und Phong-Shading

Dar­über hin­aus wer­den auch Kon­zep­te wie Z-Buf­fe­ring, Ver­tex- und Pi­xels­ha­der, Pro­jek­ti­ons­ar­ten und Ka­me­ra­s­teue­rung dis­ku­tiert und implementiert.

Der zwei­te Teil greift die Über­le­gun­gen des ers­ten Teils auf und zeigt, wie die er­ar­bei­te­ten Struk­tu­ren auf mo­der­ne Gra­fik­hard­ware über­tra­gen wer­den kön­nen. Es wird ge­zeigt, wie mit Hilfe der OpenGL Gra­fik­schnitt­stel­le die bis­he­ri­gen Er­geb­nis­se um ein viel­fa­ches be­schleu­nigt wer­den kön­nen.

Bei der Ein­füh­rung in OpenGL wird kon­se­quent auf die Ver­si­on 3 der OpenGL-Spe­zi­fi­ka­tio­nen ge­setzt. Daher Um­fasst die­ser Kurs auch eine Ein­füh­rung in die Shader­pro­gram­mie­rung.

Je nach zur Ver­fü­gung ste­hen­der Zeit wer­den fol­gen­de The­men be­han­delt:

  • Ver­tex­Buf­fer­Ob­jects und Ver­te­xAr­ray­Ob­jects
  • Ver­tex- und Frag­ment-Shader
  • Tex­tu­re­map­ping
  • Frame­Buf­fer­Ob­jects
  • Voll­bild Ef­fek­te (wie z.B. Bloom, SSAO, etc.)