TOOL ZUM DEMONSTIEREN EINIGER OPENGL FUNKTIONEN:

Wir haben uns für ein Projekt entschiede, das einige Funktionen von OPEN GL veranschaulichen soll. Dabei wird es eine grafische Oberfläche geben, die unterteilt ist in einen Anzeigebreich und einen Menüteil. Über den Menüteil kann man sich Obejekte durch auswählen anzeigen lassen. Diese Objekte können bewegt und anhand verschiedenster Funktionen verändert werden. Diese Funktionen lassen sich auch über das Menü ein- und ausschalten.

Dabei möchten wir bei der Entwicklung iterativ vorgehen, da wird den Umfang einiger Techniken und Funktionen noch nicht einschätzen können. Daher werden wir zuerst die Grunstruktur des Fensters mit seinen Menues und Steuerelementen entwickeln und dann die einzelnen Funktionen schrittweise einbauen.

Bei den Techniken und Funktionen haben wir uns mal eine Unterteilung in 3 Bereiche überlegt und einige interessante Sachen dazu gesucht, welche mir einbauen möchten:

Vertex-Operationen:

Animationen (Morphing, Vertex-Tweening, Keyframe-Animations)

Echtzeitschatten (Stencil-Shadows)

Vertex-Shaders (Wave-Shader)

Pixel-Operationen:

Blending (Alpha-maps, Color-keying, Z-Sortierung)

Texturierung (Mip-Mapping, Multitexturing, Animated Textures,Detail Textures, Cube/Sphere-Mapping, Bump-Mapping, Normal-Mapping)

Texture-rendering (Shadow maps, Motion blur)

Pixel-Shaders (Wassereffekte, Heiße Luft, ... )

Rendering-Tricks:

Cel shading, Sprites, Lens flare, BSP-Trees, Occlusion-trees, Portals, Particles ...

-- ThomasRiml - 08 Jun 2006

Nebel:

- 3 verschiedene Nebelarten koennen verwendet werden
  • GL_EXP - der Nebel wird ueber die gesamte Szene erzeugt
  • GL_EXP2 - Verbesserung zu GL_EXP
  • GL_LINEAR - fliessendere Uebergaenge und mgl. Bereiche auszublenden
- 3 verschiedene Werte fuer die Nebelberechnung
  • GL_DONT_CARE - es wird OpenGL ueberlassen die Art des Nebels zu berechnen
  • GL_NICEST - pixelgenaue Berechnung
  • GL_FASTEST - Berechnung aufgrund der Vertexdaten

-- Code-Beispiel

glFogi(GL_FOG_MODE, fogMode[2]); // Nebelart - fogMode[]= { GL_EXP, GL_EXP2, GL_LINEAR };

glFogfv(GL_FOG_COLOR, fogColor); // Nebelfarbe - fogColor[4]= {0.5f, 0.5f, 0.5f, 1.0f};

glFogf(GL_FOG_DENSITY, 0.35f); // Intensitaet des Nebel

glHint(GL_FOG_HINT, GL_DONT_CARE); // Hint Wert

glFogf(GL_FOG_START, 1.0f); // Startpunkt des Nebels vom Betrachter aus

glFogf(GL_FOG_END, 5.0f); // Ende des Nebels

glEnable(GL_FOG);

- Tastatur-Befehle:
  • 'g' - Nebelart
  • 'h' - Hint
  • Pfeil hoch/runter - Nebelintensitaet
  • Pfeil rechts/links - Nebel Startpunkt
  • Bild hoch/runter - Nebel Endpunkt

Navigationsmenu:

- erzeugt das Pop-Up-Menu mit der angegebenen Call-Back Funktion
  • glutCreateMenu(void (*func)(int value));
- erzeugen eines Menueintrages mit dem Namen und dem Parameter fuer die Call-Back-Funktion
  • glutAddMenuEntry(char *name, int value);
  • glutAddMenuEntry("FogMode - EXP", 1);
- binden des Menu's an einen Mouse-Button
  • void glutAttachMenu(int button);
  • glutAttachMenu(GLUT_RIGHT_BUTTON);

Blending:

- im Beispiel, folgende Tastatur-Befehle:
  • 'b' - Blending ein- und ausschalten
  • 'a' - Alpha-Wert erhoehen
  • 'e' - glTexEnvf durchschalten
    • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envMode[envmode]);
    • berechnet die endgültige Pixelfarbe nach Formeln, die vom Datenformat der Textur und der gewählten Texturfunktion abhängen
  • 'v' - flüssiger Übergang
  • 'm' - Blend-Map
  • 'l','L' - Light-Map's
  • Pfeil hoch/runter - glBlendFunc Source durchschalten
  • Pfeil rechts/links - glBlendFunc Destination durchschalten

-- KerstinRuhland - 05 Jul 2006

Shader:

Notwendige Schritte zum Verwenden von ARB-Shadern:
  • schauen ob ARB vertex program extensions vom Hostsystem unterstützt werden
  • Shadercode aus Textfile einlesen
  • Shader binden
  • Shader laden
  • bisherigen Vorgang auf Fehler überprüfen
  • Shader in Program einbinden

Notwendige Schritte zum Verwenden von GLSL-Shadern:
  • schauen ob ARB vertex program extensions vom Hostsystem unterstützt werden
  • Handler erzeugen
  • Shadercode aus Textfile einlesen
  • Shaderquelle generieren
  • Shader copilieren
  • Linken der Shader

Befehle zum Erzeugen von Shadern (ARB extensions):
  • Shader-Handler (Container) erzeugen: GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
  • Shader Source Code laden: void glShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
  • Shader kompilieren: void glCompileShaderARB(GLhandleARB program);

Befehle zum Erzeugen von Shadern (OpenGL 2.0 syntax):
  • Shader-Handler (Container) erzeugen: GLuint glCreateShader(GLenum shaderType);
  • Shader Source Code laden: void glShaderSource(GLuint shader, int numOfStrings, const char **strings, int *lenOfStrings);
  • Shader kompilieren: void glCompileShader(GLuint program);

Befehle zum Einbinden von Shadern (ARB extensions):
  • Program-Handler (Coontainer) erzeugen: GLhandleARB glCreateProgramObjectARB(void);
  • Shader in Program einfügen: void glAttachObjectARB(GLhandleARB program, GLhandleARB shader);
  • Program linken: void glLinkProgramARB(GLhandleARB program);

Befehle zum Einbinden von Shadern (OpenGL 2.0 syntax):
  • Program-Handler (Coontainer) erzeugen: GLuint glCreateProgram(void);
  • Shader in Program einfügen: void glAttachShader(GLuint program, GLuint shader);
  • Program linken: void glLinkProgram(GLuint program);

CODE FOLGT NÄCHSTE WOCHE

Topic attachments
I Attachment Action Size Date Who Comment
Shader.pdfpdf Shader.pdf manage 95.8 K 06 Jul 2006 - 05:36 ThomasRiml Kurze einleitende Zusammenfassung
beispiel01.tar.gzgz beispiel01.tar.gz manage 1555.5 K 05 Jul 2006 - 21:40 KerstinRuhland Erste Beispiele
srf.tar.gzgz srf.tar.gz manage 24.0 K 06 Jul 2006 - 07:38 AntoniusWeinzierl  
Topic revision: r5 - 06 Jul 2006, ThomasRiml
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Medieninformatik-Wiki? Send feedback