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

Aktuelle Zeit: Mi Jul 16, 2025 20:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
http://wiki.delphigl.com/index.php/Tutorial_Lektion_4


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 17:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Klingt, als ob "einfach" noch ein paar OpenGL Grundlagen fehlen. :) Die Lernkurve ist halt steil...
Fass ich das richtig zusammen? Perspektivisch scrollender Text vor einem Hintergrundbild, dass das ganze Fenster ausfüllt.
Wenn ja, dann ungefähr so rangehen:
- Ortografische Projektionsmatrix setzen
- Schreiben in den Tiefenbuffer abschalten vorsichtshalber (damit auch alles vom Text erhalten bleibt, evtl. nicht nötig, schadet aber hier auch nicht).
- Texturiertes Quad zeichnen, dass den Bildschirm ausfüllt.
- Perspektivische Projektionsmatrix setzen
- Text zeichnen

Mit der Farbe: Hast du vielleicht irgendeine Lichtquelle angeschaltet? Wenn ja, nicht machen, brauchst du in dieser Anwendung ja nicht. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 18:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
OpenGL ist halt eine Statemachine. Sprich wenn du etwas setzt (Farbe) oder aktivierst (Textur) wird das solange angwendet bis du es wieder deaktivierst. Das ist elemental wichtig, sprich wenn du irgendwo die Farbe rot setzt dann werden alle Primitiven solange rot gerendert bis du die Farbe wechselst. Selbes gilt für eine aktivierte Textur, die solange auf alle Primitiven angewendet wird bis du die Texturierung wieder deakitiverst. Auch für Licht ist das so. Wenn das aktiviert ist und du z.B. Text ohne Normalen renderst dann wird das Licht trotzdem auf die Textprimitiven angewandt und kann zu solchen "Eigenarten" führen.

Wenn man sich das verinnerlicht dann wird einem vieles klar, und man spart sich das ganze Rätselraten. Sprich wenn du Text sauber rendern willst, dann vorher Farbe wieder auf weiß und z.B. alle Lichter deaktiveren die vorher aktiviert wurden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für korrekte Beleuchtung mit der festen OpenGL-Pipeline muss man übrigens einiges machen. Hast du normalen für den Text gesetzt? Ohne die wird prinzipiell nichts korrekt beleuchtet? Ausserdem ist die Beleuchtung per Eckpunkt, also recht grob. Nur mal so als kleiner Hinweis.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Sieht noch so aus, als ob beim Textrendern die orthogonale Projektion aktiv ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 19:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
EWeiss hat geschrieben:
Die gluPerspective ist mir etwas suspekt da ich ja von der OpenGl Norm abweiche
Deshalb war meine Frage wie macht man es richtig damit sich das Bild an das Fenster anpaßt aber ohne
das ich dadurch die Perspektive des Textes verändere.


Dabei handelt es sich lediglich um ein kleines Werkzeug für Matrizen, wenn du diese Bibliothek nich nutzen willst (ist aber eigentlich überall verfügbar)
kannst du auch sowas hier in der Art verwenden. (natürlich müsstest du halt noch loadMatrix in meinen Beispiel verwenden ;))
Code:
  1.  
  2. void createPerspective(float fovy, float aspect, float zNear, float zFar)
  3. {
  4.     float f  = (float)(1 / tan(fovy*DEG_TO_RAD/2));
  5.    
  6.    
  7.     this[0]= f/aspect;  this[4]= 0; this[ 8]= 0;                                this[12]= 0;
  8.     this[1]= 0;         this[5]= f; this[ 9]= 0;                                this[13]= 0;
  9.     this[2]= 0;         this[6]= 0; this[10]=(zFar+zNear)/(zNear-zFar) ;        this[14]= 2*(zFar*zNear)/(zNear-zFar);
  10.     this[3]= 0;         this[7]=0;  this[11]=-1;                                this[15]= 0;
  11. }
  12.  
  13.  
  14.  


Gute Mathelibs haben eigentlich immer entsprechende Sachen für Perspektive,Lookat und co.

_________________
Meine Homepage


Zuletzt geändert von yunharla am Mo Jun 11, 2012 20:01, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 20:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
EWeiss hat geschrieben:
yunharla hat geschrieben:
EWeiss hat geschrieben:
Die gluPerspective ist mir etwas suspekt da ich ja von der OpenGl Norm abweiche
Deshalb war meine Frage wie macht man es richtig damit sich das Bild an das Fenster anpaßt aber ohne
das ich dadurch die Perspektive des Textes verändere.


Dabei handelt es sich lediglich um ein kleines Werkzeug für Matrizen, wenn du diese Bibliothek nich nutzen willst (ist aber eigentlich überall verfügbar)
kannst du auch sowas hier in der Art verwenden. (natürlich müsstest du halt noch loadMatrix in meinen Beispiel verwenden ;))
Code:
  1.  
  2. void createPerspective(float fovy, float aspect, float zNear, float zFar)
  3. {
  4.     float f  = (float)(1 / tan(fovy*DEG_TO_RAD/2));
  5.    
  6.    
  7.     this[0]= f/aspect;  this[4]= 0; this[ 8]= 0;                                this[12]= 0;
  8.     this[1]= 0;         this[5]= f; this[ 9]= 0;                                this[13]= 0;
  9.     this[2]= 0;         this[6]= 0; this[10]=(zFar+zNear)/(zNear-zFar) ;        this[14]= 2*(zFar*zNear)/(zNear-zFar);
  10.     this[3]= 0;         this[7]=0;  this[11]=-1;                                this[15]= 0;
  11. }
  12.  
  13.  
  14.  


Würde ich sehr gerne mal testen aber etwas schwierig nach Delphi umzusetzen ;)

Danke.

gruss


glaube Coolcat (? oder ein anderer Nutzer) hat auch ne fertige Bibliothek für den ganzen Vektor und Matrizenkram (Gott sei dank liefert MS sowas für meinereins freihaus :P)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 20:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Was meinst du mit "richtiger gluPerspective"? Da gibts kein Falsch/Richtig, die kann man nach belieben anpassen (fast, siehe FOV, etc.). Aber in der Regel solltest du zumindest beim Ratio, also da wo jetzt 800/600 steht eher ClientWidth(ClientHeigth drinhaben. Ansonsten sind Sachen wie FOV (Field-of-View, Blickwinkel) und zNear / zFar je nach Fall anzupassen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Mo Jun 11, 2012 20:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Du musst doch nicht strecken. Pass doch das Quad auf dass du dein Bild renderst auch an die Fenstergröße an, bzw. lass es auf 4:3 unabhängig vom Ratio. Das ist in OpenGL ja alles dir selbst überlassen, du kannst also z.B. auch vertikal strecken und dann bei 16:9 z.B. oben und unten abschneiden, oder es ganz anders machen. Du wirst ja nicht gezwungen es zu strecken oder so, da du selbst die Koordinaten angibst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Di Jun 12, 2012 07:19 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Was mir gerade so auffällt:
Code:
  1. gluPerspective(45, 800/600, 1, 1000.0);


Du rechnest 800/600, allerdings als Integer Wert. Bei C/C++ hatte ich mal das Problem, dass dort nicht 1,33 rauskommt, sondern 1,0

Daher 800.0 nehmen. Wollte ich nur mal anmerken ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Bitmap in 2D REndern
BeitragVerfasst: Di Jun 12, 2012 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
yunharla hat geschrieben:
glaube Coolcat (? oder ein anderer Nutzer) hat auch ne fertige Bibliothek für den ganzen Vektor und Matrizenkram

Die ist aber C++. Mit grundelegenden Kenntnissen und dem gluPerspective Artikel ist es aber trivial das Umzusetzen. Da sich der Threadopener sich aber gegen sinnvolle Vorschläge Beratungsresistent zeigt…

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 Gäste


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]