ich komm' ma wieder hinterher gehinkt mit einem Problem, dass hier schon viele male angesprochen wurde, aber in keinem Thread hab' ich eine Lösung für mein Prob gefunden: Ich habe einen Raum, da ist eine Kugel drin. Wenn ich mich jetzt in dem Raum bewege (NICHT DREHE!!!) dann bleibt das Licht an der gleichen Position, soll also eine stationäre Lichtquelle sein. Ich habe alle Normalvektoren übergeben (die Kugel ist sowieso von MCAD). Ich hab' alles genauso gemacht wie im Licht-Tut beschrieben, aber es klappt immer noch nicht. Hier ein kleiner Quellcodefetzen:
Code:
glrotatef(90,0,1,0);
glTranslatef(rotation+1, -2, -1);
SetupLight();
gltranslate(..............)
DrawRoom;
DrawSphere;
rotation ist eine Variable vom Typ extended und der Benutzer soll dann später beim Drücken einer Taste den Wert erhöhen bzw. erniedrigen können. Mein Licht dreht sich seltsamerweise entlang der X-Achse mit (das Licht rotiert nach oben). Wieso und wie kann ich das ändern?
das zweite glrotatef ist nur als Verschiebung von einem späteren Objekt gedacht, ich zweichne meinen Raum so: Eine Wand machen, die gegenüberliegende Wand wird dann einfach so kreiert: Nochmal der gleiche Code und ein gltranslatef(0,0,-Wand_Abstand); davor. Ich kann mein Licht schlecht irgendwo in den Codesalat der Raumwände hineinsetzen...
hab' den Fehler zwar nicht gefunden, hab' jetzt aber einfach mal ein neues Programm gemacht mit einem einfachen Raum und einer Kugel drin, jetzt geht's, hab' den Raum jetzt ohne glrotate-Befehle usw. erstellt, also gleich für jedes Quad gleich die Endkoordinaten gesetzt, jetzt läuft alles wunderbar wenn ich mich bewege/drehe. Aber ich hätte da noch eine andere Frage: Wieso funktioniert das wirklich schöne specular Licht eigentlich nur bei Kugeln und nicht bei Quads? Ich kann mich erinnern, dass SOS irgendwo mal erwähnt hat, dass das specular nur bei hoher Tesselation zu gebrauchen sei, aber als ich dann mit MCAD ein plane erstellt hab' und das in viele einzelne Quads unterteilt hab' (da gibt's ja in MCAD extra eine Funktion für) war der Effekt ganz komisch: Manche Flächen waren hell und manche waren dunkel, also alles andere was ich brauche. Kann ich irgendwie eine GLATTE Fläche so erstellen, dass sie das specular auch gut aussieht?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Auszug aus der OpenGL-FAQ zum Thema Lichtposition :
Zitat:
# Wie kann ich eine Lichtquelle fest im Raum positionieren, also unabhängig von meinem Augpunkt ?
Mit jeder Änderung der Szene ändert sich auch die ModelView Matrix. Damit wird es notwendig, die Lichtquelle für jedes Frame neu zu positionieren, was z.B. ähnlich dem folgenden Pseudo-Code realisiert werden könnte:
Soll das Licht zusammen mit einem bestimmten Objekt bewegt werden, muss für Lichtquelle und Objekt eine gemeinsame ModelView Transformation durchgeführt werden, also noch vor der Installation der Lichtquelle.
Zum Specularlicht : Zeig mal einen Screenshot, dann kann man eher sagen obs stimmt oder nicht. So ein richtiges Specularhighlight in runder Form bekommst du mit OpenGL-Beleuchtung nämlich wirklich nur dann wenn die Geometrie stark tesseliert ist. Ausserdem sollte man dazu dann auch weiche Per-Vertex-Normale übergeben, aber ich tippe mal darauf das du momentan nur Per-Dreieck-Normale übergibts (oder Per-Quad).
Registriert: Do Mai 13, 2004 16:36 Beiträge: 116 Wohnort: Deutsch-Wagram (Österreich)
Für einen (eckigen) Raum ist das eh besser. Wie du bald feststellen wirst, ist das GL-Licht nicht sehr nützlich.
Es hat viele Probleme.
Es beleuchtet z.B. nur per-Vertex (Directional Light manchmal sogar nur per-Triangle).
_________________ Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)
Manche Flächen waren hell und manche waren dunkel, also alles andere was ich brauche
klingt als ob die Normalvektoren durcheinandergeraten wären - bist du sicher, dass die für das Objekt überhaupt angeschaltet waren?
Was die Beleuchtung betrifft: Subdivision nützt bei planen Flächen nur was bei positionalen Lichtern (übrigens auch bei Per Pixel Beleuchtung - da jedes Pixel die selbe Normale erhält, würde es auch bei Per Pixel Beleuchtung mit einer direktionalen Lichtquelle genau gleich erhellt).
Den Unterschied kann man hier sehen, wo ein Spotlicht auf zwei unterschiedlich aufgelöste Flächen fällt:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Mai 13, 2004 16:36 Beiträge: 116 Wohnort: Deutsch-Wagram (Österreich)
@Mars:
Wenn man die Normalen per-Vertex berechnet, dann wird interpoliert.
Den Rest erledigt die Normalmap.
Das ist besser als Subdivision.
Manchmal ist es sogar besser,
per-Plane zu rechnen...
z. B. Würfel...
_________________ Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
@uzingLG hat geschrieben:
Wenn man die Normalen per-Vertex berechnet, dann wird interpoliert.
Ich behaupte mal das jemand wie Mars das sehr gut weiß...
@uzingLG hat geschrieben:
Den Rest erledigt die Normalmap.Das ist besser als Subdivision.
Was erledigt die Normalmap? Normalmaps sind doch nur für Bump-Mapping gut...
@uzingLG hat geschrieben:
Manchmal ist es sogar besser, per-Plane zu rechnen...
Eine Plane ist kein geometrisches Objekt, sondern eine unendlich große Flächenentsprechung einer geometrischen Primitive wie z.B. einem Dreieck oder einem Quad. Und warum soll es besser sein die Normalen per Dreieck(Quad) zu berechnen als per-Vertex?
Registriert: Do Mai 13, 2004 16:36 Beiträge: 116 Wohnort: Deutsch-Wagram (Österreich)
Nicht immer Bei einem Würfel z. B. ist das aber am besten.
@per-Plane: Den Ausdruck hab ich aus dem Zerbst-Kompendium ich hab gedacht das ist halt so ein gebräuchlicher Ausdruck für per-Triangle Beleuchtung @Normalmap: Ja ich habe mich schlecht ausgedrückt, aber wenn man schon PPL hat, dann ist Normal-Mapping nicht schwer und besser als Extra-Geometrie.
Nur meine Meinung.
_________________ Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
@uzingLG hat geschrieben:
Nicht immer Bei einem Würfel z. B. ist das aber am besten.
Kannst du das mal genauer elaborieren? Warum sollte das denn nicht immer besser sein? Ich bin mir sicher du meinst jetzt was anderes, nämlich "weiche" Normale, was aber nix damit zu tun hat ob diese per Dreieck oder per Vertex errechnet werden. Weiche Normale sehen bei Objekten mit scharfen Kanten natürlich nicht immer korrekt aus, da sollte man schon ne Kantentoleranz implementieren.
@uzingLG hat geschrieben:
@Normalmap: Ja ich habe mich schlecht ausgedrückt, aber wenn man schon PPL hat, dann ist Normal-Mapping nicht schwer und besser als Extra-Geometrie.
Aber das hat doch nichts hier mit der Beleuchtung zu tun. NormalMap != PPL.
@uzingLG:
ich glaube du hast da etwas missverstanden: bei einer planen Fläche (und es geht ja um Sinn bzw. Unsinn der Subdivision eines Quads) schauen halt mal alle Normalvektoren in eine Richtung - egal ob die Normalen jetzt per Pixel oder per Vertex vergeben werden, daher muss hier auch nichts interpoliert werden - bzw. eine Interpolation ändert nichts.
Die Beleuchtung ergibt sich aber aus dem Einfallswinkel des Lichtes, bei direktionaler Beleuchtung fließt hier (wenn wir Attenuation mal außen vor lassen) die Ebenennormale und der Lichtvektor hinein, bei positionaler Beleuchtung die Position der Lichtquelle, bzw. die Position wo der Lichtstrahl auftrifft, da sich in diesem Fall die Lichtvektoren aus der Differenz zwischen Position des Lichtes (punktförmige Lichtquellen angenommen) und der Position jedes einzelnen Punktes einer Oberfläche ergeben.
@SOS: Also ich übergebe die Normalen per Triangle. Das mit den weichen Normalen hab' ich noch nie gehört. Ein Screenshot? Naja, ich denke mal ein Screenshot wird nicht viel zeigen, denn das kann man einfach beschreiben: Da ist halt ein Viereck und da sind ohne Übergang einfach weisse Flecken/Punkte drauf, ich denke mal ein Quad weiss, ein Quad wieder ganz schwarz, und das dann so weiter...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wenn das ein erkennbares Muster ist, dann tippe ich mal darauf das du die Vertices nicht immer in der korrekten Reihenfolge hast und so einige Normalen aufgrund dessen in die entgegengesetzte Richtung zeigen. Lass dir mal die Normalen anzeigen, dann siehst du recht schnell ob dem so ist.
Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.