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

Aktuelle Zeit: Fr Jul 18, 2025 21:01

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Licht Fehler skuril Oo
BeitragVerfasst: Di Nov 14, 2006 17:10 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich hab mal ein bild angehängt, zu sehen ist meine szene, das licht in der mitte scheint einen kleinen kreis auf den untergrund was ja soweit richtig ist, jetzt gibt es aber zwischen der kamera und dem licht weitere solche lichtflecken, wenn ich die kamera drehe, bewegen sich diese mit der kamera (bzw in die gleiche Richtung), woran liegt das ?

Code:
  1. const
  2.   mat_specular   : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  3.   mat_shininess  : Array[0..0] of GlFloat = (50.0);
  4.   mat_ambient    : Array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);
  5.   mat_diffuse    : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  6.  
  7.   light_position : Array[0..3] of GlFloat = (0, 5, 0, 1);
  8.   light_ambient  : Array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);
  9.   light_diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  10.  

Code:
  1.  
  2. procedure TMainForm.UpdateLight;
  3. begin
  4.   glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  5.   glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  6.   glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  7.   glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  8.  
  9.   glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  10.   glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  11.   glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  12.  
  13.   glEnable(GL_LIGHTING);
  14.   glEnable(GL_LIGHT0);
  15. end;
  16.  

Code:
  1.  
  2. procedure TMainForm.IdleHandler(Sender: TObject; var Done: Boolean);
  3. begin
  4.   CalcTimestep;
  5.  
  6.   Movement;
  7.  
  8.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  9.   glViewport(0, 0, ClientWidth, ClientHeight);
  10.   glMatrixMode(GL_PROJECTION);
  11.   glLoadIdentity;
  12.   gluPerspective(45, ClientWidth / ClientHeight, NearClipping, FarClipping);
  13.   glMatrixMode(GL_MODELVIEW);
  14.   glLoadIdentity;
  15.  
  16.   // Reset
  17.   SetupOpenGL;
  18.  
  19.   // Camera
  20.   glrotatef(crot.x, 1, 0, 0);
  21.   glrotatef(crot.y, 0, 1, 0);
  22.  
  23.   glTranslatef(cpos.x, cpos.y, cpos.z);
  24.  
  25.   // Settings
  26.   if Dopolygonmode then
  27.     glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) else
  28.       glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  29.   if not DoTexture then
  30.     glDisable(GL_TEXTURE_2D);
  31.  
  32. // Skybox
  33.   glDisable(GL_LIGHTING);
  34.   glPushmatrix;
  35.     // Skybox mit der Spielerposition verschieben
  36.     glTranslatef(-cpos.x, -cpos.y, -cpos.z);
  37.     glCallList(skybox);
  38.   glPopMatrix;
  39.  
  40.   // Light
  41.   UpdateLight;
  42.  
  43.   // Light Setting
  44.   if not DoLight then
  45.     glDisable(GL_LIGHTING);
  46.  
  47.   // Objects
  48.   glCallList(scene);
  49.  
  50.   SwapBuffers(DC);
  51.   Done := false;
  52. end;
  53.  


mfg und danke schonmal


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 14, 2006 20:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kannst du mal in dem Bild mit Anzeigen wie der Untergrund unterteilt ist. (In Polygone. Einfach mal ein Raster mit drüberrendern)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 14, 2006 20:16 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Eine hellere Fläche liese sich ja noch durch Specular Licht erklären. Für den 2ten braucht es aber schon unterschiedliche Normalvektoren wenn ich mich nicht irre. Könntest du zum einen mal den Specular-Anteil auf 0 geben, bzw. eine andere Farbe als den Diffusen Anteil? Und dann wäre der Code für das Erstellen der scene-Display Liste noch interessant.

Der Specular-Anteil ist übrigens dort am höchsten wo Einfallswinkel gleich Ausfallswinkel (in Bezug auf die Lichtquelle bzw. der Betrachterposition). Der Punkt wo der Specular-Anteil am größten ist ändert sich dadurch natürlich mit der Betrachterposition mit.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 15, 2006 15:23 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
@Lyr: verstehe net ganz oo


@Topic: ja hier ein screenshot mit der unterteilung, auf dem man den fehler nicht sieht, weil ich mich recht nahe am licht befinde


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Zuletzt geändert von Seth am Mi Nov 15, 2006 15:28, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 15, 2006 15:27 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hier kann man es gut erkennen, ich hab nur ein licht, aber irgendwie strahlt es doch auch woanders hin Oo

das ist nur wenn ich mich vom licht wegbewege, wenn ich das licht angucke ist diese "lichtlinie" genau in meine richtung, wenn ich mich drehe dreht sich diese linie in die gleiche richtung (CW oder CCW)


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 16, 2006 02:50 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Nur um sicher zu gehen, dass nicht der Treiber eine Macke hat: Probier mal unter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers
den Treiber rauszunehmen damit der Software Renderer verwendet wird. Specular kann das ja nicht sein, wenn sich das Licht mit dir dreht und es (sieht für mich zumindest so aus) insgesamt 3 helle Stellen gibt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 16, 2006 12:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hab da auch noch ne Idee. Hast du den LocalViewer aktiviert? Wenn nein mach das mal. (glLightModel -> GL_LIGHT_MODEL_LOCAL_VIEWER)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 16, 2006 13:58 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
im software modus ist der fehler auch und lightmodel bringt auch nichts Oo

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 17, 2006 16:24 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Seth hat geschrieben:
im software modus ist der fehler auch und lightmodel bringt auch nichts Oo

mfg


Dreh doch mal den Specular wert runter ( "mat_specular : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);").
Aber ich verstehe sowieso nicht das jemand mit dem OpenGL-light arbeitet( Besonderst da ein PPL-Shader wirklich nicht die Welt ist. ).

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 18, 2006 14:05 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Wie verhielte es sich denn mit der Geschwindigkeit? Ich könnte mir vorstellen, das bei z.B. vier Lichtern das normale HW T&L schneller ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 20, 2006 13:17 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
wenn ich shininess auf 0 setze ist es weg, sieht ohne aber auch scheiße aus :(

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 20, 2006 14:00 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
NerdIII hat geschrieben:
Wie verhielte es sich denn mit der Geschwindigkeit? Ich könnte mir vorstellen, das bei z.B. vier Lichtern das normale HW T&L schneller ist.


Falls die Frage an mich gerichtet ist:
T&L dürfte nicht schneller sein, und ich bin mir garnicht sicher ob T&L nicht sowieso vom Treiber emuliert wird.

Seth hat geschrieben:
wenn ich shininess auf 0 setze ist es weg, sieht ohne aber auch scheiße aus :(

mfg


Hmm eigentlich war Specular gemeint, und nicht Shininess.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 20, 2006 16:10 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ja specular bringt keine änderungen (hab mal 0.5) ausprobiert, und es tritt nicht nur bei mir auf.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 20, 2006 19:51 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
in meinem neuen projekt tritt das wieder auf, wenn ich flach über der szene bin und mich dann drehe dann sieht mans deutlich, ich muss irgendeinen elementaren fehler machen, anders kann ich mir das nicht vorstellen Oo

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 20, 2006 21:18 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Der elementare Fehler dürfte sein, dass du die glLight-Position an der falschen Stelle setzt.

Zitat:
Wiki:
"Die Position wird durch die Modelansichtsmatrix (zum Zeitpunkt des Aufrufs von glLight) transformiert, so als wäre glLight ein Punkt, und als Betrachterkoordinaten abgespeichert."


somit solltest du das UpdateLight aufrufen bevor du deine Kamera setzt.

Obwohl das noch immer keine Erklärung für die vielen Lichtpunkte ist. Ausserdem sollte dein Fehlerbild dann auch etwas anders aussehen ... wundert mich etwas, denn entweder du hast da noch etwas relevanten Source versteckt, die Angaben in unsrem schönen Wiki sind falsch oder aber ich bin gerade etwas blöd.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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 ]