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

Aktuelle Zeit: Di Jul 15, 2025 14:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Image in 2D anzeigen
BeitragVerfasst: So Apr 10, 2011 21:48 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Hallo,

ich hätte da mal gern ein Problem. :mrgreen:

Ich hab ein 2D Ortho Menü das über Escape aufgerufen wird.
Dort würde ich gerne eine Rechteckige Bitmap darstellen lassen.
Geht das? Oder muss ich da Tricks anwenden?

Momentan hab ich ein Bild in den Maßen 250*150 das ich dann auf 250*250 speichere.
Das wird dann als Textur auf einem rechteckigen Quad wieder entzerrt dargestellt.

Aber vielleicht gibst ja ne andere Methode die ich nicht kenne.
gruß
Bio


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: So Apr 10, 2011 22:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Verzerrung nutze ich eher ungerne, weil es nie ganz verlustfrei ist. Bei deinen Maßen würde ich das Bild eher auf einen schwarzen Untergrund von 256x256 Pixeln legen und den dann abspeichern. Die Texturkoordinaten errechnen sich dann aus Echte Länge / 256.

Noch besser ist es dann, wenn du mehrere Elemente deines Menüs in eine Textur packen kannst und die nur über die Koordinaten unterscheidest. Nennt man Texturatlas, spart Platz und teure Texturwechsel. Du könntest z.B. 10 Buttons in eine 1024x1024 Textur packen und dann die Quads mit den entsprechenden Textur-Koordinaten versehen, um das zu rendern.

greetings

_________________
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  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Mo Apr 11, 2011 18:07 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Lord Horazont hat geschrieben:
Du könntest z.B. 10 Buttons in eine 1024x1024 Textur packen und dann die Quads mit den entsprechenden Textur-Koordinaten versehen, um das zu rendern.


Ok. Ich kenne Textur-Koordinaten bisher nur im Sinne von z.B. : glTexCoord2f(0,1)

Meinst du das damit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Mo Apr 11, 2011 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ja, glTexCoord2f ist gemeint. Nur steht da dann halt in den Parametern nicht (0, 1) sondern halt
Code:
  1. glTexCoord2f(btn1left / TextureWidth, btn1top / TextureHeight);
btn1*** sind dabei die Pixelkoordinaten von wo der Teil mit eben dem zu btn1 gehörigen Bild in der Textur gespeichert ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Mo Apr 11, 2011 20:26 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Ich habs jetzt glaub ich kapiert und mal folgendes zusammengefaßt:


Die Angaben für die Funktion glTexCoord2f(x,y) beziehen sich auf
die Breite / Einzelbildbreite.

Bei einem Atlas mit 2x2 Bildern und einer Bildgröße von 128x128 sähe das so aus:
Code:
  1.  
  2.   0 ------ 0.5 ------ 1
  3.   |         |         |
  4.   |         |         |
  5.   0.5 ----- 0.5 ----- 1
  6.   |         |         |
  7.   |         |         |
  8.   1 ------  1  ------ 1


Die Koordinaten für das Bild "Oben-Links" wären dann:
Li/Ob : 0 - 0
Re/Ob: 0.5 - 0
Re/Un: 0.5 - 0.5
Li/Un: 0 - 0.5

Komplizierter wirds natürlich bei einem Beispiel mit folgenden Maßen:

Imagegröße : 256x256 ( = IG)
Texturgröße : 16x16 ( = TG)

Jetzt haben wir eine Schrittweite (SW) von: 1 / (IG / TG)
Das ergibt: 0.0625
Für die 4 Ecken ergeben sich dadurch die folgenden Formeln:
Links: SW * X
Oben: SW * Y
Rechts: SW * (X+1)
Unten: SW * (Y+1)

Um das 5te Bild in der 6ten Reihe zu erhalten muss man noch bedenken das die Bilder horizontal und vertikal in diesem Beispiel jeweils von 0..15 angesprochen werden. D.h. unser gewolltes Bild ist an Position (4,5).
Das ergibt:
Links: 0.1875
Oben: 0.3125
Rechts: 0.25
Unten: 0.375

Wow. Jetzt versteh ich warum es Atlasgeneratoren gibt, wenn man bedenkt das auch MipMaps in einen Atlas reingepackt werden können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Mo Apr 11, 2011 21:34 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Da ja 1. deine Buttons wahrscheinlich immer gleich groß sind lohnt es sich nicht Mipmaps zu nutzen.

2. bei solchen "Atlanten" wären Mipmaps auch nachteilhaft, da die "einzelnen Texturen" ja zusammengestaucht werden und bei einer 4x4, 2x2 oder 1x1 Textur mehrere Buttons zusammenquetschen.

Ist sicher nicht das was du willst. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Mo Apr 11, 2011 21:46 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
SDH.Prod hat geschrieben:
Ist sicher nicht das was du willst. ;)


Ganz sicher nicht. :mrgreen:

Habe aber das PDF über den Nvidia Atlasgenerator gelesen. Die machen das so.
Ob das nu sinnvoll ist oder nicht kann ich mit meinem Wissen noch gar nicht beurteilen.

Aber probieren werd ich das sicher nicht. :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Di Apr 12, 2011 15:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wie gesagt, wenn du einen Atlas benutzt, musst du die Einzelbilder im Atlas aber nicht auf Power-Of-Two-Format bringen. Das spart Platz und sichert die Qualität.

greetings

_________________
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  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Di Apr 12, 2011 17:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Noch besser für ein Menu wäre es wenn du das was schon gesagt wurde noch mit sog. 9-patches aufwertest.
Das spart echt eine Menge Arbeit, da du so eine Grafik für verschiedene Größen verwenden kannst.
Code:
  1.  
  2.     ------ ------  ------    
  3.   |       |       |       |
  4.   |  0    |  1    |  2    |
  5.     ------ ------  ------    
  6.   |       |       |       |
  7.   |  3    |  4    |  5    |
  8.     ------ ------  ------   
  9.   |       |       |       |
  10.   |  6    |  7    |  8    |
  11.     ------ ------  ------    
  12.  


0 2 6 8 bleiben immer gleich
1 3 5 7 werden anhand der jeweiligen seitenlänge von 4 scaliert (also 1 und 7 die länge von 4, 3 und 5 dann die höhe)
4 wird durch die Größe des Inhalts scaliert.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Image in 2D anzeigen
BeitragVerfasst: Fr Apr 22, 2011 18:56 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
@yunharla:

Jo. Das kommt mir bekannt vor.
Sowas hab ich bei HTML-Programmierung schon gemacht, um Tabellen oder ähnliches mit Umrandung zu versehen.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]