OpenGL bumpmapping (DOT3) welche OpenGL Funktionen?



  • Ich möchte mir ein 2d Spiel in der Art der ersten beiden GTA titel bauen. Also eine flache Ansicht von oben benutzen.
    Dabei möchte ich die gesamte Beleuchtung mittels Bumpmapping realisieren.

    Ich hatte jetzt schon Erfolg mit GL_REGISTER_COMBINERS_NV über Normalmaps einen einfachen Bumpmapeffekt erzeugt. Da dieser jedoch nur auf nvidia-chips funktioniert (war halt das erste SEHR GUTE tutorial was ich finden konnte) werde ich es nicht weiter verwenden.

    Sicher könnte ich jetzt direkt in moderne Shaderprogrammierung einsteigen, aber ich verspreche mir mehr Performance und mehr Abwährtskompatibilität wenn ich für dieses doch recht simple Grafikfunktion auch eine ältere Schnittstelle benutze.

    Nun kommt eure Hilfe ins Spiel! 😉

    Es fehlt mir einfach die Übersicht. Mein erster Versuch GL_REGISTER_COMBINERS_NV funktioniert nicht auf ati. Ich habe jetzt ein Beispiel gefunden welches auf ATI und NVIDIA funktioniert. Dieses Arbeitet sehr viel mit glTexEnvf. Soll ich mich da reinlesen?

    Hier noch einmal ganz grob umschrieben wie die Beleuchtung realisiert werden soll, dammit ihr wisst was ich an Funktionalität benötige:

    Da es natürlich viele Lichtquellen gibt die sich auch überschneiden, würde ich in zwei schritten rendern.

    1. Das erstellen einer Belichtungstmap für den gesamten Bildschirm. Diese ist nicht als Graustufenbild zu verstehen! Sondern summiert für jeden Pixel die Werte für Richtung (Rot und Grün) und Stärke (Blau) um später mit Normalmaps kombiniert zu werden.

    Dort werden nun alle Lichtquellen gezeichnet. Also z.B. Spotlights (Wie das licht einer Taschenlampe die auf dem Boden liegt)...

    2. Das eigendliche Rendern des Bildes, in dem aus den einzelnen Objekten (Farbtextur und Normalmap) und der Belichtungstmap das endgültige Ergebniss entsteht.

    Macht mich schlauer! 😃



  • Osbios schrieb:

    Sicher könnte ich jetzt direkt in moderne Shaderprogrammierung einsteigen, aber ich verspreche mir mehr Performance und mehr Abwährtskompatibilität wenn ich für dieses doch recht simple Grafikfunktion auch eine ältere Schnittstelle benutze.

    Auf moderner Hardware lauft alles über Shader. Wenn du eine "ältere Schnittstelle" benutzt führt das nur dazu dass der Grafiktreiber das Shaderschreiben für dich übernimmt. Mehr Performance wird also ziemlich sicher nicht rausspringen, eher das Gegenteil (vor allem wenn du auf den alten Immediate Mode Kram setzt).
    Ich würde dir raten einfach auf Shader zu setzen. Dein Vorhaben wird sich damit sicher auch bei weitem einfacher und übersichtlicher realisieren lassen als mit endlosen Kombinationen verschiedener Renderstates...



  • ich verspreche mir mehr Performance und mehr Abwährtskompatibilität wenn ich für dieses doch recht simple Grafikfunktion auch eine ältere Schnittstelle benutze.

    Die Register-Combiner sind effektiv eine alternative Beschreibungsform fuer Pixel-Shader 1.x.
    Deine Software wuerde dadurch gegenueber GLSL (das Shader 2.0 voraussetzt) nur eine Kartengeneration (naemlich Geforce 3/4) mehr unterstuetzen.
    Im Gegenzug akzeptierst Du dafuer Limitationen die bei moderner Hardware (die durchaus 5 Jahre alt sein darf) keinerlei Relevanz mehr hat.
    Von den Problemen die 8Bit-Farbregister mitbringen mal ganz zu schweigen...



  • ok danke. Dann werde ich mich jetzt mit GLSL beschäftigen.


Anmelden zum Antworten