Perl Hoch Drei

Max Maischein

Frankfurt.pm

Perl hoch Drei

3D Grafik mit OpenGL und Perl

 (als OpenGL Font)

3D Grafik

  • Warum?

  • Was geht?

  • Wie geht's?

Warum?

  • Warum nicht?

  • 3D Grafik sieht nett aus

  • OpenGL ist einfach und macht Spaß

  • OpenGL ist fast überall verfügbar wo's Perl gibt

Warum? (2)

 Notebook
  • Hardware-Unterstützung ist vorhanden

  • Sogar auf meinem Notebook

  • Hardware muss benutzt werden

Was geht?

  • Anything goes

  • ... solange man möglichst wenig in Perl macht

Wie geht's?

  • use OpenGL::Simple;

  • OpenGL-Code schreiben

  • Möglichst wenig Grafik/Berechnungen in Perl

Anything goes (1)

Spiegelungen

Anything goes (2)

Texturen

Anything goes (3)

Schatten

Anything goes (4)

?(Netzwerk)spiele?

 oder Camelite

?Camel-Modell?

  • Position via POST-request

  • Spielupdate via Response

Live Demos

  • Würfel (todo)

  • Marmorfläche (Spiegelung, todo)

  • Planet (done)

  • Fireworks (todo)

Literatur

  • The Red Book

  • http:// ...

  • Bleibt weg von NeHes Tutorials

Danke

Fragen? (als 3D Font)

(oder Fireworks)

Bonus Section: Einführung in OpenGL

  • Sehr einfache Sprache:

  • Befehle für Würfel, Kugeln, Donuts, ... =image Würfel

  • Befehle für Lichter (aber nicht für Schatten)

  • Globale Parameter (Transformation, Farbe, Material, ...) =image Bunter Würfel

  • Befehle für Transformationen (glRotate(), glTranslate(), ...) =image Arrow-right

(* Stack für die Transformationsmatrix)

Die Funktionsweise

  init()
  
  while(1) {
      glClear(0,0,0,0);
      draw_scene();
      glFlush();
  }

Die Render-Pipeline

  Camera -> Model -> Fragments -> Pixel
  
=head1 Umsetzung der Render-Pipeline

?? Reihenfolge ??

  • Kamera

  • Motiv

  • Fotografieren

  • Belichten des Bilds auf Fotopapier

Umsetzung der Render-Pipeline

  • glSolidSphere(); glTranslate();

  • gluLookat();

  • glViewport();

Ein Beispiel

  my $angle;
  sub draw_scene {
      glTranslate(0,0,-5);
      glSolidCube(1);
      glRotate(($angle++ % 360),0,1,1);
  }