Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 12, 2025 17:08

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Licht Licht Licht...
BeitragVerfasst: Do Jun 10, 2004 19:07 
Offline
DGL Member

Registriert: Sa Mär 20, 2004 22:48
Beiträge: 104
hi@all,

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:
  1.  
  2.  
  3. glrotatef(90,0,1,0);  
  4. glTranslatef(rotation+1, -2, -1);
  5.  
  6. SetupLight();
  7.  
  8. gltranslate(..............)
  9.  
  10. DrawRoom;
  11. DrawSphere;
  12.  
  13.  


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?

[/code]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 10, 2004 19:16 
Offline
DGL Member

Registriert: Do Mai 13, 2004 16:36
Beiträge: 116
Wohnort: Deutsch-Wagram (Österreich)
Setzt mal das SetupLight; hinter das 2. glTranslatef.

_________________
Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 10, 2004 19:43 
Offline
DGL Member

Registriert: Sa Mär 20, 2004 22:48
Beiträge: 104
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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 10, 2004 20:05 
Offline
DGL Member

Registriert: Do Mai 13, 2004 16:36
Beiträge: 116
Wohnort: Deutsch-Wagram (Österreich)
Dann transliere extra zur Lichtposition!
Zeig mal ein bisschen mehr Code, wo ist die Kameraführung usw.

_________________
Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 00:00 
Offline
DGL Member

Registriert: Sa Mär 20, 2004 22:48
Beiträge: 104
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 09:56 
Offline
DGL Member
Benutzeravatar

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:

- Viewing Transformation durchführen,
- Lichtquelle installieren // glLightfv(GL_LIGHT_POSITION, ...)
- Objekte definieren,
- swapBuffers

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).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 12:24 
Offline
DGL Member

Registriert: Do Mai 13, 2004 16:36
Beiträge: 116
Wohnort: Deutsch-Wagram (Österreich)
Für einen (eckigen) Raum ist das eh besser. 8)
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 16:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 16:59 
Offline
DGL Member

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 17:10 
Offline
DGL Member
Benutzeravatar

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?

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 17:47 
Offline
DGL Member

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 :oops: ich hab gedacht das ist halt so ein gebräuchlicher Ausdruck für per-Triangle Beleuchtung :oops:
@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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 17:52 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
@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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 19:44 
Offline
DGL Member

Registriert: Sa Mär 20, 2004 22:48
Beiträge: 104
@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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 12, 2004 20:08 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]