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

Aktuelle Zeit: Fr Jul 18, 2025 04:32

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Feb 15, 2009 20:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 15:18
Beiträge: 62
Danke euch allen, und vor allem danke denen, die mich willentlich oder unwillentlich dazu überredet haben, eine einzelne Textur zu verwenden. Ich hab jetzt zwar einige Zeit damit zugebracht, das ganze umzupfriemeln, aber es klappt! :D

Ich hab die Textur jetzt mal als PNG hochgeladen, weil nicht alle Browser mit TGA-Dateien zurechtkommen. Ist eigentlich recht einfach, die aus separaten Texturen zu erstellen. Ich hab in Inkscape die Grafiken so angeordnet und skaliert, dass die fertige dabei rauskam. Exportiert, in Gimp umgewandelt (das kannte ich übrigens schon vorher, und habe es auch genau zu diesem Zweck verwendet, aber trotzdem Danke, Sellmann ;)) und in den VRAM geladen.

Hier noch die Prozedur, die ich zum Zeichnen der einzelnen Grafiken verwendet habe und das ganze drumrum (die TGLWindow.Render ist etwas gekürzt, danach kommen allerdings nur noch Anweisungen zum Zeichnen des Titels und des Inhalts etc.):

Code:
  1. procedure TGLWindow.Render;
  2. var Pos, Diff: TPoint; i: Integer;  
  3.  
  4.     // Top und Right bezeichnen Breite und Höhe
  5.     procedure DrawImagePart(const Quad, Part: TGLRect);
  6.     begin
  7.     glBegin(GL_QUADS);
  8.         glTexCoord2f(Part.Left                / 55, Part.Bottom              / 55); glVertex2f(Quad.Left,            Quad.Bottom);
  9.         glTexCoord2f((Part.Left + Part.Right) / 55, Part.Bottom              / 55); glVertex2f(Quad.Left+Quad.Right, Quad.Bottom);
  10.         glTexCoord2f((Part.Left + Part.Right) / 55, (Part.Bottom + Part.Top) / 55); glVertex2f(Quad.Left+Quad.Right, Quad.Bottom+Quad.Top);
  11.         glTexCoord2f(Part.Left                / 55, (Part.Bottom + Part.Top) / 55); glVertex2f(Quad.Left,            Quad.Bottom+Quad.Top);
  12.     glEnd;
  13.     end;
  14.  
  15. begin
  16.     glColor4f(1, 1, 1, 1);
  17.     glBindTexture(GL_TEXTURE_2D, GUI.Textures.Window);
  18.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  19.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  20.  
  21.     // Unterer Rand
  22.     DrawImagePart(GLRect(X,          Y, 19,       19), GLRect(0,  0, 19, 19));
  23.     DrawImagePart(GLRect(X+19,       Y, Width-38, 19), GLRect(25, 0, 1,  19));
  24.     DrawImagePart(GLRect(X+Width-19, Y, 19,       19), GLRect(36, 0, 19, 19));
  25.  
  26.     // Oberer Rand
  27.     DrawImagePart(GLRect(X,          Y+Height-35, 27,       35), GLRect(0,  20, 27, 35));
  28.     DrawImagePart(GLRect(X+27,       Y+Height-35, Width-54, 35), GLRect(27, 20, 1,  35));
  29.     DrawImagePart(GLRect(X+Width-27, Y+Height-35, 27,       35), GLRect(28, 20, 27, 35));
  30.  
  31.     // Seiten
  32.     DrawImagePart(GLRect(X,          Y+19, 14, Height-54), GLRect(0,  19, 14, 1));
  33.     DrawImagePart(GLRect(X+Width-14, Y+19, 14, Height-54), GLRect(41, 19, 14, 1));
  34.  
  35.     { ... }
  36.  
  37. end;


GL_NEAREST hab ich gar nicht gebraucht :D

Grüße und noch mal Danke, dass das jetzt so schnell ging,
Yogu


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 16, 2009 09:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mir ist da noch etwas aufgefallen. Deine Textur ist 55x55. Erweitere das besser mal auf 64x64. Damit bist du kompatibler und so wirklich viel mehr Speicher braucht es dann auch nicht. Das Clamp to edge brauchst du auch nur ein ein mal nach dem Erstellen der Textur setzen. Das bleibt dann an der Textur hängen. Bzw Zum kleinen Optimieren für zwischendurch kannst du das Zeichnen umstellen damit du nur ein mal glBegin und ein mal glEnd aufrufst. Das für jedes Quad zu machen ist nicht mehr nötig, da du die Textur ja nicht mehr wechselst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 16, 2009 15:52 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was Lossy hier nicht expliziet sagt: Deine Texturgröße wird auf einigen Grafikkarten nicht funktionieren, und einfach eine Weiße Textur erzeugen.

_________________
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  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder 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 | 14 Queries | GZIP : On ]