Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   OpenGL - unterschiedliche Farbdarstellung (https://www.delphipraxis.net/165570-opengl-unterschiedliche-farbdarstellung.html)

meme2822 6. Jan 2012 09:06

OpenGL - unterschiedliche Farbdarstellung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

Habe folgendes Problem:

Möchte mit OpenGL Messergebnisse darstellen.
Klappt so weit ganz gut, nur mal werden die Farben so angezeigt, wie sie sollen und mal wesentlich dunkler.
Die eigentlichen Farben sind immer gleich (fülle mit den Werten auch eine Bitmap, sieht immer gleich aus).

Den Hintergrund setze ich mit glclearcolor(1,1,1,0.0) und benutze die 'Standardbeleuchtung' von OpenGL (spiele also nicht mit Licht).

Woran kann es liegen?

Melanie

Aphton 6. Jan 2012 09:29

AW: OpenGL - unterschiedliche Farbdarstellung
 
Schalt mal die Beleuchtung aus!
Ansonsten liegts eben daran, dass du die Flächennormalen nicht richtig setzt - und dadurch kommts eben zur falschen Beleuchtung!

meme2822 6. Jan 2012 09:38

AW: OpenGL - unterschiedliche Farbdarstellung
 
Hallo,

Danke für die schnelle Anwort.

Aber ich schalte gar kein Licht an (oder muss ich es explizit ausschalten)?

Melanie

Uwe Raabe 6. Jan 2012 09:55

AW: OpenGL - unterschiedliche Farbdarstellung
 
Das Stichwort ist glDisable(GL_LIGHTING). Damit wird jede Berechnung von Beleuchtungseffekten ausgeschaltet. Alle Elemente werden dann mit ihrer zugewiesenen Farbe dargestellt.

meme2822 6. Jan 2012 10:05

AW: OpenGL - unterschiedliche Farbdarstellung
 
Danke,

hatte es gar nicht 'enabled'.
Nun habe ich es aber trotzdem 'disabled' (wie gezeigt), aber der gleiche Effekt bleibt:

Mal hell, mal dunkel. :?:

Melanie

Aphton 6. Jan 2012 10:06

AW: OpenGL - unterschiedliche Farbdarstellung
 
Achso...
Ja dann zeig mal die relevanten Codestellen bitte her!
Durchs Raten allein kann man ja nicht weit kommen

meme2822 6. Jan 2012 10:28

AW: OpenGL - unterschiedliche Farbdarstellung
 
Ist etwas verteilt, aber ich stückel mal die Teile etwas zusammen....

Delphi-Quellcode:
Procedure TdreiD.Render;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0,ClientWidth/ClientHeight,iNearClipping,iFarClipping);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glTranslatef(ITranslationX*SpaceNorm,ITranslationy*SpaceNorm*0.8,ITranslationZ*SpaceNorm);
  glTranslatef(0.5*SpaceNorm,0.5*SpaceNorm,0.5*SpaceNorm);
  glRotatef(IAngleX,1,0,0);
  glRotatef(IAngleY,0,1,0);
  glRotatef(IAngleZ,0,0,1);
  glTranslatef(-0.5*SpaceNorm,-0.5*SpaceNorm,-0.5*SpaceNorm);
  gldisable(GL_LIGHTING);
  if currentShowTyp <> nil then CurrentShowTyp.Plot;
  RenderAxis;
  SwapBuffers(DC);
end;
Zeichnen der Punkte bei 'Plot'..
Delphi-Quellcode:
 for i := 0 to NormedDataSet.Count - 1 do
    begin
      glBegin(GL_POINTS);
        P := NormedDataSet.Items[i];
        glcolor3f(ColoredSet[i,0]/255,ColoredSet[i,1]/255,ColoredSet[i,2]/255);
        glVertex3f(p^.X,P^.Y,p^.Z- SpaceNorm);
      glend;
    end;
Ansonsten noch viel verschieben und rotieren, um die Achsen zu zeichnen.
Wie gesagt, immer der gleiche Code, mal hell mal dunkel!

Melanie

Aphton 6. Jan 2012 10:32

AW: OpenGL - unterschiedliche Farbdarstellung
 
Also auf Anhieb sehe ich keine Fehler.
(Außer das man die Farbe vorher - vorm glBegin() glEnd() Block - setzen sollte; weiß aber nicht, ob das nun etwas zur Sache tut)

Zeig mal deine glEnables() her.

meme2822 6. Jan 2012 10:44

AW: OpenGL - unterschiedliche Farbdarstellung
 
Viele benutze ich nicht...

Delphi-Quellcode:
Procedure TdreiD.SetupGl;
begin
  glClearColor(1,1,1,0.0);
  glenable(GL_DEPTH_TEST);
  glDisable(GL_CULL_FACE);

Delphi-Quellcode:
 glenable(GL_Blend);
  glBLendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GL_Blend schalte ich allerdings wieder aus, bevor ich die Punkte zeichne..

Danke, Melanie

meme2822 6. Jan 2012 10:44

AW: OpenGL - unterschiedliche Farbdarstellung
 
Achso, Farbe vor das glBegin ziehen, bringt auch nichts, habe ich probiert...

Aphton 6. Jan 2012 10:46

AW: OpenGL - unterschiedliche Farbdarstellung
 
Vlt hilft diese Änderung
Delphi-Quellcode:
  glClearColor(1,1,1,1);
Ansonsten weiß ich leider auch nicht weiter. Vlt. hat ein anderer eine Idee?

Edit: Also ich vermute dass es an Blending liegt. Deshalb sollten beim Color-Buffer die Alpha Werte auch gelöscht (bzw. überschrieben) werden (per ClearColor).
Weiters könntest du evt. glColor4f() mit dem 4 Parameter "1" probieren.

meme2822 6. Jan 2012 10:51

AW: OpenGL - unterschiedliche Farbdarstellung
 
Hatte ich auch schon mal im Verdacht und ausprobiert(ohne Erfolg).
Habe es trotzdem jetzt noch einmal probiert, leider wieder nichts!

Vielen Dank für Deine Mühe!

Melanie

Auch glColor4f() bringt nichts, mal hell, mal dunkel!

Aphton 6. Jan 2012 10:57

AW: OpenGL - unterschiedliche Farbdarstellung
 
Was ist wenn du das Blending ganz weglässt?

Ach noch ein Verdacht: Wie du vlt. weißt, ist OpenGL ne riesige Statemachine - ist ein State gesetzt, so bleibt es bis zur nächsten Veränderung erhalten. Kann es sein, dass du evt. irgendeine Fremdkomponente benützt, die OpenGL verwendet? Du disablest zwar GL_LIGHTING aber kann ja sein, dass in den folgenden zwei Zeilen Code drin ist, das nicht von dir ist
Delphi-Quellcode:
  if currentShowTyp <> nil then CurrentShowTyp.Plot;
  RenderAxis;
(und somit dort eine Stateänderung stattfindet - bsp. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0))

meme2822 6. Jan 2012 11:14

AW: OpenGL - unterschiedliche Farbdarstellung
 
Wenn ich das Blending ganz weglasse, wird meine Achsenbeschriftung unleserlich, am eigentlichen Problem ändert sich nichts.

Ich verwende zwar Code, den ich nicht geschrieben habe,habe ihn aber vorliegen und durchsucht, leider nichts in der Richtung.

EWeiss 6. Jan 2012 15:54

AW: OpenGL - unterschiedliche Farbdarstellung
 
Zitat:

Zitat von meme2822 (Beitrag 1144638)
Wenn ich das Blending ganz weglasse, wird meine Achsenbeschriftung unleserlich, am eigentlichen Problem ändert sich nichts.

Ich verwende zwar Code, den ich nicht geschrieben habe,habe ihn aber vorliegen und durchsucht, leider nichts in der Richtung.

Bei OpenGL macht es keinen sinn anhand von Code Schnipseln zu versuchen dein problem zu lösen.
Lade dir doch einfach ein Würfel Beispiel bei Nehe herunter und spiele etwas mit den parametern.

Sobald du dann die Materie etwas verstehst passe deinen code dementsprechend an.

gruss

meme2822 10. Jan 2012 08:15

AW: OpenGL - unterschiedliche Farbdarstellung
 
Hallo,

habe die Lösung gefunden:

Beschrifte meine Achsen mit TextSuite. Dabei wird eine Textur verwendet, die ich hinterher wieder ausschalten musste!


Warum die Farben aber trotzdem ab und zu 'normal' angezeigt wurden, ist mir (noch?) nicht klar....

Melanie

Aphton 10. Jan 2012 14:44

AW: OpenGL - unterschiedliche Farbdarstellung
 
Also wars doch ein State-fehler =D

Bei OpenGL muss man sich eben dran gewöhen - wenn man etwas nicht braucht, vorher "abschalten"... denn man weiß ja nie, wo es wieder "eingeschalten" wird!

Zum Unklaren - ich schätze mal, dass du irgendwo ein glBindTexture(GL_TEXTURE_2D, 0) oder glDisable(GL_TEXTURE_2D)
hast und das nur unter bestimmten Bedingungen ausgeführt wird (daher hats manchmal geklappt und manchmal nicht).

meme2822 11. Jan 2012 09:00

AW: OpenGL - unterschiedliche Farbdarstellung
 
Danke für Deine Mühe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz