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

Aktuelle Zeit: So Jul 20, 2025 14:11

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



Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
BeitragVerfasst: Sa Jan 16, 2010 16:34 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Flash hat geschrieben:
Du zeichnst doch den hintergrund immer, oder?


mmmh... Nein, der nächste Schritt wird sein, das der Benutzer sich aus den folgenden 3 Möglichkeiten eine aussuchen kann:
a) einfarbiger Hintergrund, bei dem er die Farbe frei wählen kann (so hatte ich es bisher)
b) Gradienten Hintergrund (das hab ich jetzt hinbekommen)
c) Hintergrundbild das er frei laden kann. (das muß ich mir als nächstes anschaun...

Flash hat geschrieben:
Du hast ja richtig erkannt, dass du die Perspektive danach neu setzen musst. Ich hätte das in deine Funktion "Zeichne Hintergrund" eingebaut. Du kannst das so programmieren, dass du diesen Hintergrund überall weiderverwenden kannst (in anderen GL Projekten) ohne dass du an dem dortigen Code was ändern musst.

hehe, der war gut... ICH? :shock: also ich bin froh wenn ichs in meinem jetzigen Projekt irgendwie hinbekomme, an eine wiederverwendbarkeit denke ich da nicht auch noch - obwohl das natürlich schon schön wäre :oops:

Flash hat geschrieben:
Du musst nur den OpenGL Zustand nachdem der Hintergrund gezeichnet wurde, wieder genau so einstellen, wie vor dem Aufruf. (Und wie ich sagte, den Tiefenpuffer löschen nach dem Zeichnen)

nur ist gut :)

nee ich bin erstmal froh das es so geht, ich hätte nicht gedacht das mich das 3 Tage kostet einen Gradienten Hintergrund einzubauen :lol: :lol: :lol:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 16, 2010 20:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das mit dem speichern und wiederherstellen is eig keine große Sache, du musst halt nur glPush- und glPopMatrix an den richtigen stellen Aufrufen:
Code:
  1. procedure DrawBackground;
  2. var Viewport: TVector4i;
  3. begin
  4.   glGetIntegerv(GL_VIEWPORT, @Viewport[0]);       //ViewPort speichern
  5.  
  6.   glMatrixMode(GL_PROJECTION);                    //in die ProjektionsMatrix
  7.   glPushMatrix;                                   //Matrix speichern
  8.   glLoadIdentity;                                 //Matrix zurücksetzen
  9.   glOrtho(0, Viewport[2], Viewport[3], 0, 0, 10); //2D-Sicht festlegen (mit Viewport als Grenzen)
  10.  
  11.   glMatrixMode(GL_MODELVIEW);                     //in die ModelMatrix
  12.   glPushMatrix;                                   //Matrix speichern
  13.   glLoadIdentity;                                 //Matrix zurücksetzen
  14.  
  15.   glBegin(GL_QUADS);                              //Hintergrund Zeichnen
  16.     glColor3f(1,0,0); glVertex2f(          0,           0);
  17.     glColor3f(0,1,0); glVertex2f(          0, ViewPort[3]);
  18.     glColor3f(0,0,1); glVertex2f(ViewPort[2], ViewPort[3]);
  19.     glColor3f(1,1,0); glVertex2f(ViewPort[2],           0);
  20.   glEnd;
  21.  
  22.   glMatrixMode(GL_PROJECTION);                    //in die ProjektionsMatrix
  23.   glPopMatrix;                                    //alte Matrix wieder laden
  24.  
  25.   glMatrixMode(GL_MODELVIEW);                     //in die ModelMatrix
  26.   glPopMatrix;                                    //alte Matrix wieder laden
  27.  
  28.   glClear(GL_DEPTH_BUFFER_BIT);                   //Tiefenbuffer löschen
  29. end;

Und das kannst du jetz überall aufrufen, dann wird alles mit dem Hintergrund überzeichnet und danch kannst du normal weiterarbeiten. Die vorhandene Matrix wird ja nach dem Zeichnen des Hintergrunds wieder hergestellt...

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 07, 2010 18:36 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Hallo mal wieder,
Heute möchte ich noch einmal diesen Thread aufgreifen.

Folgendes Phänomen tritt bei meinem Projekt auf:

Ich kann ja inzwischen ein bildschirmfüllendes Quad wahlweise mit einem Gradient oder einer Textur bekleben.

Das funktioniert auf meinem PC, meinem Laptop, und dem Laptop meiner Freundin auch ganz wunderbar.
Auf anderen PC's habe ich feststellen müssen, das sich die Textur abdunkelt wenn ich Daten einlese. Dummerweise aber auch nicht bei jedem hinzugeladenen Modell und auch nicht immer im gleichen Maß... Aber zu 95% wird abgedunkelt.

Auffällig ist, das in meinen Rechnern überall ATI Grafikkarten verbaut sind, bei den Rechnern wo es abdunkelt sind überall NVIDEA Grafikkarten eingesetzt.
Leider habe ich keine Möglichkeit direkt auf NVIDEA zu testen und deswegen stellt sich die Fehlersuche ein wenig mühselig dar.

hier mal die procedur die den hintergrund mit textur zeichnet:

Code:
  1. procedure TForm1.TextureBackground(Sender:TObject);
  2. begin
  3.         glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  4.         glMatrixMode(GL_PROJECTION);                        //in die ProjektionsMatrix
  5.         glLoadIdentity;                                     //Standart laden
  6.         glOrtho(0, panel2.width, panel2.height, 0, -10, 10);  //2D-Ansicht
  7.         glMatrixMode(GL_MODELVIEW);                         //in die ModelMatrix
  8.         glLoadIdentity;                                      //Standart laden
  9.         fTexture.Bind;
  10.         glBegin(GL_QUADS);                                  //BildSchirmfüllendes Quad zeichnen
  11.         glcolor4f(1.0,1.0,1.0,1.0);                             // ohne diese Zeile wird das Hintergrundbild in einem Farbton gerendert
  12.         gltexcoord2f(0.0,0.0); glVertex2f(           0.0,                  0.0);  //unten links
  13.         gltexcoord2f(0.0,1.0); glVertex2f(           0.0,    panel2.height);    //oben links
  14.         gltexcoord2f(1.0,1.0); glVertex2f(panel2.width,  panel2.height);      //oben rechts
  15.         gltexcoord2f(1.0,0.0); glVertex2f(panel2.width,                0.0);    //unten rechts
  16.         glEnd;
  17.         fTexture.Unbind();
  18.         glClear(GL_DEPTH_BUFFER_BIT);
  19. end;

Kennt jemand ein ähnliches phänomen zwischen ATI und NVidea? bzw. eine Lösung? Oder ist irgendetwas an meiner Procedur falsch?

ich tappe noch ein wenig im dunkeln.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Feb 08, 2010 09:32 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

versuch mal
Code:
  1. glDisable(GL_COLOR_MATERIAL);
wenn du Texturen benutzt. Keine Garantie, aber daran könnte es liegen.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Feb 08, 2010 10:10 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ansonsten zeig mal Screenshots. Also wie es normal aussieht und die abgedunkelte version.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Feb 08, 2010 20:45 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Danke erstmal für die Antworten.

ich habe die Zeile hier auf dem Rechner mit der ATI GraKa eingefügt und nun macht er mir den Hintergrund in einem rot ton...
Das gleiche hatte ich vorher wenn ich die Zeile mit der color weggelassen habe.

Hier mal zwei links zu screenshots.

Einen Screenshot vom abgedunkelten kann ich erst morgen liefern wenn ich wieder an nem Rechner mit NVidea GraKa sitze.
http://file1.npage.de/003341/04/bilder/normaler_hintergrund.jpg
http://file1.npage.de/003341/04/bilder/zeile_eingefuegt.jpg


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Feb 09, 2010 00:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bevor du die Hintergrund Textur zeichnest musst du glColor(1,1,1) aufrufen.

Die Farbe von glColor wird mit der Textur multipliziert und färbt sie so ein.

Das würde bei deinem ersten Screenshot auch passieren, wenn du ein Rotes Objekt davor zeichnest. (Oder die Hersteller haben leicht unterschiedliche Stadnardwerte, was ich aber nicht glaube)

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Feb 09, 2010 07:05 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
naja deswegen hatte ich ja Zeile 11 (im unteren code die auskommentierte zeile 12) drin... aber ich habe jetzt nochmal ein glcolor vor den kompletten aufruf der procedure gesetzt und jetzt funktioniert es auf meiner ATI wieder so wie es sollte.

ich rufe jetzt so auf:

Code:
  1.   if Hintergrundart = 3 then begin
  2.   glcolor3f(1.0,1.0,1.0);
  3.   TextureBackground(nil);
  4.   end;

und TextureBackground sieht so aus:
Code:
  1. procedure TForm1.TextureBackground(Sender:TObject);
  2. begin
  3.         glDisable(GL_COLOR_MATERIAL);
  4.         glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
  5.         glMatrixMode(GL_PROJECTION);                        //in die ProjektionsMatrix
  6.         glLoadIdentity;                                     //Standart laden
  7.         glOrtho(0, panel2.width, panel2.height, 0, -5, 1000);  //2D-Ansicht
  8.         glMatrixMode(GL_MODELVIEW);                         //in die ModelMatrix
  9.         glLoadIdentity;                                      //Standart laden
  10.         fTexture.Bind;
  11.         glBegin(GL_QUADS);                                  //BildSchirmfüllendes Quad zeichnen
  12. //        glcolor4f(1.0,1.0,1.0,1.0);                             // ohne diese Zeile wird das Hintergrundbild in einem Farbton gerendert
  13.         gltexcoord2f(0.0,0.0); glVertex2f(           0.0,              0.0);  //unten links
  14.         gltexcoord2f(0.0,1.0); glVertex2f(           0.0,  panel2.height);    //oben links
  15.         gltexcoord2f(1.0,1.0); glVertex2f(panel2.width,  panel2.height);      //oben rechts
  16.         gltexcoord2f(1.0,0.0); glVertex2f(panel2.width,              0.0);    //unten rechts
  17.         glEnd;
  18.         fTexture.Unbind();
  19.         glClear(GL_DEPTH_BUFFER_BIT);
  20.         glEnable(GL_COLOR_MATERIAL);
  21. end;


Das funktioniert jetzt hier (ATI)...

ich bin eigentlich überzeugt das es einen unterschied zwischen ati und nvidea standards geben muß, weil sich mein programm ja unterschiedlich verhält.

in einer stunde weiss ich mehr, dann kann ich meine neue version auf nvidea testen.

***EDIT***

so, die Stunde ist rum und voller Erwartung habe ich auf dem Rechner mit NVidea hier getestet.
Niederschmetterndes Ergebnis: Er sch... mir was und dunkelt weiterhin ab.

siehe Screenshot:

http://file1.npage.de/003341/04/bilder/nvidea_dunkelt_ab.jpg


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Feb 09, 2010 09:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Deaktivier mal glColorMaterial nicht.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Feb 09, 2010 09:53 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
werd ich machen, aber kann ich erst morgen testen,

ich hab hier kein delphi :(

leider gibts ja kein delphi portable....
*** Edit, am gleichen Tag abends... ***
So nun habe ich wie angeraten die Zeile
Code:
  1. glDisable(GL_COLOR_MATERIAL);
auskommentiert und ausserdem sämtliche in meinem Projekt vorkommenden
Code:
  1. glcolor3f(irgendwas,irgendwas,irgendwas)
durch
Code:
  1. glcolor4f(irgendwas,irgendwas,irgendwas,1.0)
ersetzt.

mehr fällt mir im Augenblick echt nicht mehr ein. Morgen kann ichs auf NVidea testen... auf ATI siehts (wie immer) gut aus.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 10, 2010 08:14 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Guten Morgen,

Auch die oben erwähnten Maßnahmen führen zu keinem anderen Ergebnis.
auf den Rechnern hier mit NVidea Grafikkarten dunkelt die Textur und das Gradient ab, sobald ich Daten einlade.

Hat jemand noch irgendwelche ideen an was es noch liegen könnte?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 10, 2010 10:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das kann irgendwie nicht so richtig sein... Das ganze weißt doch recht stark auf ein falsch gesetztes glColor hin.

Die richtige stelle das zu setzen ist nebenbei, genau in deiner "ZeichneHintergrund" Methode.

Ich habe früher immer nur mit glColor3f gearbeitet. 4f brauchst du dafür nicht.

Mach mal ein neues Testprojekt wo du deine "Zeichne Hintergrundbild" Funktion übernimmst und dann auf Knopfdruck einen Farbigen Würfel davor rotieren läßt.
Wenns dort auch auftritt kannst du den Code mal posten.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 10, 2010 11:19 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Ok, habe mir auch schon gedacht das ich das mal in ein testprojekt holen sollte aber das werde ich vorm Wochenende nicht hinbekommen.
Das glcolor4f hatte ich ursprünglich eingefügt weil ich mit transparent schalten herumgespielt habe... zur zeit werden objekte die ich selektiere in einem transparenten orange "gehighlightet"
weil du geschrieben hattest das die color matrix multipliziert wird dachte ich das er bei gemischter verwendung von glcolor3f und glcolor4f eventuell bei nvidea mit einer gedachten 0.0 multipliziert, deswegen habe ich jetzt konsequent da eine 1.0 hingepappt.

ich melde mich wieder wenn ich ein testprojekt habe das nur den hintergrund simuliert so wie du geschrieben hast.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 10, 2010 11:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das funktioniert auf meiner GF7800GTX 1a! sry für die parts, aber es musste schnell gehen :P

MfG Bergmann


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

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 10, 2010 13:47 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Huhu,

danke

das kann ich morgen hier testen, weil wir hier kein entpackprogramm zur verfügung haben das rar dateien öffnen kann. :oops: (Fremdschäm)
also muß ichs zuhause entpacken und kanns dann morgen mitbringen um es auf nvidea zu testen.


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


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.010s | 15 Queries | GZIP : On ]