![]() |
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 |
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! |
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 |
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.
|
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 |
AW: OpenGL - unterschiedliche Farbdarstellung
Achso...
Ja dann zeig mal die relevanten Codestellen bitte her! Durchs Raten allein kann man ja nicht weit kommen |
AW: OpenGL - unterschiedliche Farbdarstellung
Ist etwas verteilt, aber ich stückel mal die Teile etwas zusammen....
Delphi-Quellcode:
Zeichnen der Punkte bei 'Plot'..
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;
Delphi-Quellcode:
Ansonsten noch viel verschieben und rotieren, um die Achsen zu zeichnen.
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; Wie gesagt, immer der gleiche Code, mal hell mal dunkel! Melanie |
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. |
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:
GL_Blend schalte ich allerdings wieder aus, bevor ich die Punkte zeichne..
glenable(GL_Blend);
glBLendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Danke, Melanie |
AW: OpenGL - unterschiedliche Farbdarstellung
Achso, Farbe vor das glBegin ziehen, bringt auch nichts, habe ich probiert...
|
AW: OpenGL - unterschiedliche Farbdarstellung
Vlt hilft diese Änderung
Delphi-Quellcode:
Ansonsten weiß ich leider auch nicht weiter. Vlt. hat ein anderer eine Idee?
glClearColor(1,1,1,1);
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. |
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! |
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:
(und somit dort eine Stateänderung stattfindet - bsp. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0))
if currentShowTyp <> nil then CurrentShowTyp.Plot;
RenderAxis; |
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. |
AW: OpenGL - unterschiedliche Farbdarstellung
Zitat:
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 |
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 |
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). |
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