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

Aktuelle Zeit: So Jul 20, 2025 09:27

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



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

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

ich habe mich gefragt, wie man einen OpenGL Hintergrund "aufpeppen" kann - mir würde ein Farbverlauf ala Gradient gut gefallen oder eben ein schönes Hintergrundbild.

Auf der Suche nach einer (einfachen, einsteigerfreundlichen) Möglichkeit habe ich ausser diversen links die irgendwie immmer zu Nehe's Lesson23 führten nichts gefunden mit dem ich was anfangen konnte.

Die Nehe Sache braucht eine glaux header Sache die ich irgendwie auch nicht richtig zum laufen bekomme.
Über einen Background Gradienten habe ich so gut wie nichts gefunden.

Hat jemand vielleicht ein einfaches Beispiel für mich, wie man sowas machen kann?

danke schonmal


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 01:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also ein Gradient ist so ziemlich das einfachste was es in OpenGL gibt.

Du kannst durch Smooth Shading (guck mal ins Wiki) einen Farbverlauf erzeugen. Du musst nur noch die Vertices an die passende Stelle mit der passenden Farbe platzieren. Der Verlauf wird dann von der GraKa erzeugt.

Und ein Hintergrundbild ist einfach ein Quad das Bildschirmfüllend ist und mit einer Textur bespannt wird.

Beide Dinge sind in unseren Tutorials erklärt. Smooth Shading nur am Rande (aber da gibts wiederum einen Wiki Artikel drüber). Einfach mal reinlesen.

Was nicht erklärt ist: Damit dein Bild/Farbverlauf überschrieben werden kann (und somit im Hintergrund wirkt) musst du den als erstes zeichnen und dabei entweder das schreiben in den Tiefenpuffer deaktivieren oder aber nach dem Zeichnen den Tiefenpuffer (und nur diesen) mit glClear löschen.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 08:46 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
hmm gut danke erstmal.

Bleibt die Frage: Wie zeichne ich denn ein bildschirmfüllendes quad? bzw. die Eckvertices für den gradient...
:shock:
werd das alles nochmal lesen und schaun ob ichs übersehen habe...

Wölfchen


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 13:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Im 2D Modus. gluOrtho ist da das Stichwort. Siehe auch das 2D Tutorial.

Dort siehst du wie du Objekte (wie quads) Pixelgenau positionieren kannst.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 13:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Flash hat geschrieben:
Im 2D Modus. gluOrtho ist da das Stichwort. Siehe auch das 2D Tutorial.

Du meinst glOrtho (ohne u). Beim Orthomodus kann man problemlos die OpenGL Funktion benutzen. Die Methode von glu heißt gluOrtho2D und ihr fehlen die Parameter für den Tiefenbuffer.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 18:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du hast natürlich recht. Ich hatte noch das glu im Hinterkopf und habs dann einfach mal vermischt.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lossy eX hat geschrieben:
Flash hat geschrieben:
Im 2D Modus. gluOrtho ist da das Stichwort. Siehe auch das 2D Tutorial.

Du meinst glOrtho (ohne u). Beim Orthomodus kann man problemlos die OpenGL Funktion benutzen. Die Methode von glu heißt gluOrtho2D und ihr fehlen die Parameter für den Tiefenbuffer.


Ist jetzt offtopic... aber ich hab mich schon immer gefragt warum es für den Ortho Modus ne gl-Funktion gibt aber für die Perspective nicht... macht das irgendeinen sinn? Bei beiden weren matrizen berechnet und angewendet..

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja, weil glOrtho eine spezielle Matrix für eine parllele Projektion erstellt. Deshalb gibt es dafür wohl eine eigene Funktion.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 14, 2010 20:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
naja.. für die perspective gibts doch glfrustum oder nicht? ist zwar nicht so einfach wie gluperspective aber damit ists möglich.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 15, 2010 08:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Sellmann: Genau. Es gibt immernoch glFrustrum. Das müsste in etwa so was machen wie gluPerspective. Allerdings sind die Parameter etwas schwirig zu verstehen. Denn FieldOfView ist irgendwie verständlicher als das da.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 15, 2010 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Auf dieser Seite http://www.songho.ca/opengl/gl_transform.html ist das glFrustum sehr gut beschrieben (etwas weiter in der mitte), sogar mit Beispielprogramm.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 15, 2010 15:36 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Lossy eX hat geschrieben:
Sellmann: Genau. Es gibt immernoch glFrustum. Das müsste [...]


Frustum, ohne r. Mit r sprichts sich zwar schöner, aber der Link geht dann nicht. ;) (Der Link in meinem Zitat geht jetzt. )

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 15, 2010 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
der Frust-Rum ist noch etwas anderes, was hier hoffe ich keiner nötig hat^^

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 16, 2010 14:49 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Huhu,
Nachdem das hier ja ein wenig offtopic geraten ist, wollte ich noch meine derzeitige Lösung zeigen, falls mal jemand das gleiche Problem hat.

also das mit dem Bildschirmfüllenden Quad konnte ich dank Bergmanns Hilfe so lösen:

Code:
  1. procedure TForm1.ZeichneBackground(Sender:TObject);
  2. begin
  3.         glMatrixMode(GL_PROJECTION);                        //in die ProjektionsMatrix
  4.         glLoadIdentity;                                     //Standart laden
  5.         glOrtho(0, 900, 900, 0, -100, 5000);  //2D-Ansicht
  6.         glMatrixMode(GL_MODELVIEW);                         //in die ModelMatrix
  7.         glLoadIdentity;                                      //Standart laden
  8.         glBegin(GL_QUADS);                                  //BildSchirmfüllendes Quad zeichnen
  9.         glColor3f(0,1,0); glVertex2f(          0,             0);
  10.         glColor3f(0,1,0); glVertex2f(          0,  900);
  11.         glColor3f(0,1,1); glVertex2f(900,  900);
  12.         glColor3f(1,0,1); glVertex2f(900,             0);
  13.         glEnd;
  14.         glClear(GL_DEPTH_BUFFER_BIT);                       //DepthBuffer löschen
  15. end;


das ganze rufe ich dann vom intimer vorm rendern auf:

Code:
  1. {------------------------------------------------------------------------------}
  2. {                        OpenGL Render Aufruf mit Timer                        }
  3. {------------------------------------------------------------------------------}
  4. procedure TForm1.Timer1Timer(Sender: TObject);
  5. begin
  6.   ZeichneBackground(nil);
  7.   Render;
  8.  
  9. end;


da das ganze mir dann meine Selektion gehörig zerschossen hat musste ich bestimme Sachen im Rendermodus im falle vom Renderaufruf aus der Selections-Funktion abschalten, das habe ich dann so gemacht:
Code:
  1. //..
  2.   if amselektieren = false then  begin
  3.   glMatrixMode(GL_PROJECTION);
  4.   glLoadIdentity;
  5.   if perspektivisch then begin
  6.   gluPerspective(45.0, Panel2.Width/Panel2.Height, NearClipping, FarClipping);
  7.   end else begin
  8.   orthologisch(nil);
  9.   end;
  10.   end;
  11.   amselektieren := false;
  12. //..


wobei amselektieren ein globales boolean ist, das ich in der selection function auf true setze bevor von da gerendert wird.

Gruß und Danke mal wieder an alle Helfenden :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 16, 2010 15:15 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du zeichnst doch den hintergrund immer, oder?

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

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


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