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

Aktuelle Zeit: Fr Jul 18, 2025 00:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Große Texturen - Tiling?
BeitragVerfasst: Fr Mär 24, 2006 23:50 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

ich müsste in meinem Programm eine etwas größere Textur laden, sagen wir 2048x2048. Nun würde das ja Unmengen an Performance fressen, wenn man ein Quad mit einer solchen Textur in voller Größe einfach zeichnet.

Deshalb meine Frage:

Wie kann ich so etwas tilen, oder wie gehe ich vor wenn ich solch große Texturen anzeigen möchte? Soll das (bewegte) Hintergrundbild für ein Spiel werden.

Danke + Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 00:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Feb 02, 2005 14:22
Beiträge: 81
Also ich habe vor kurzem mal eine Skybox (also sechs Texturen) mit jeweils 1024 * 1024 Pixeln erstellt mit ein Paar Sachen im Innern der Box und da hatte ich frametechnisch keine Schwierigkeiten. Und mein Computer ist mit seinen 1000 MHz und 256 MB RAM nicht sonderlich üppig ausgestattet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 00:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also wenn die Karte es unterstützt und es unbedingt sein muss, dann würd es sogar weniger fressen als wie wenn du sie zerschneiden würdest. Aber normal sind so 512x512 das Maximum was man normal verwendet. Evtl solltest du mal schauen ob du das in etwa so hinbekommst. Was sind denn das für texturen und wofür sind sie denn gut?

Wobei es auch nicht sonderlich unperformant ist, wenn 4 oder 16 Teile einer Textur zeichnen musst. Wenn du sonst nicht so viel machst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 00:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das zeichnen sollte keine Zeit kosten. Viel eher das laden. Außerdem unterstützen nicht alle Karten diese Größe. Vorallem bei den OnBoard Chips solltest du erstmal nachgucken ob die Größe passt.

Wenn du zu wenig Speicher auf der GraKa hast, könnte es passieren das die Textur in den RAM ausgelagert wird. Dann wirds rein Zeichentechnisch extrem teuer, weil die Daten immer erst über den Bus müssen. Oder die Textur ist das einzigste was auf der GraKa bleibt, und der rest wird ausgelagert (was in keinster weise besser sein sollte).

Hab gerade nochmal nachgerechnet... 16MB das sollten die meisten Karten verkraften. Aber wie gesagt, die größe könnte Treiberseitig probleme machen. Alles was nicht offiziell unterstützt wird kann funktionieren, muss aber nicht (das macht Fehler schwer nachvollziebar... hatte ich mal mit NonPoT Texturen)

Bei SharedMemory Karten hast isses immer blöd, weil 16MB traffic nicht zu verachten sind.


So weit das allgemeine... Zum tilling sag ich nix. Da haben wir spezies für... ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 10:55 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Lossy eX hat geschrieben:
Also wenn die Karte es unterstützt und es unbedingt sein muss, dann würd es sogar weniger fressen als wie wenn du sie zerschneiden würdest. ... Was sind denn das für texturen und wofür sind sie denn gut?


Hi,

also die Textur ist eine Hintergrundtextur. Kann man nicht kacheln oder sonst wie aufbauen, das ist einfach ein großes Bild ;). Wird in ein Jump&Run eingebaut.

Hmm also ich habe das nun noch nicht explizit ausprobiert, aber ich kann mich an ein anderes Projekt erinnern, da habe ich eine 1024x1024 Textur als Hintergrund gezeichnet, und das hat an FPS schon einiges verschluckt (und der Graka-Speicher drüfte nicht voll gewesen sein).

Naja ich denke, ich werde es in 4 512er Teile splitten, denn da sich das Bild bewegt und mein Fenster nur halb so breit ist wie die Textur, reicht es dann wenn ich nur 3/4 der gesamten Textur zeichne.

Naja, danke für eure Antworten! Werds mal ausprobieren und mich ggf. nochmal melden ;)

Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 13:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich hab selber auch das Problem gehabt das ich sehr große texturen darstellen mußte.. hab da eine menge rumprobiert und geschwindigkeitstests gemacht. Resultat war dashier (am beispiel einer 2k Textur):

1.) Die komplette textur als ein ganzes laden als GL_TEXTURE_2D
Das hat sehr viele probleme gemacht... es war langsam und generell... lief nicht wirkich gescheit (viele rechner haben die textur auch garnicht erst erstellt)

2.) Das ganze in tiles aufteilen (128x128)
Ging von der Performance sehr gut, probleme hat es u.U. manchmal gemacht an den stellen wo die Tiles zusammengeklebt waren.. jenachdem wie nah man dran war konnte man ein Seam sehen. Problem bei mir war das ich die 2k Textur streamen mußte.. also es war eine Sequenz.. und da war das mit den Tiles im endeffekt zu langsam.

3.) Größere Tiles (512x512)
Ähnlich wie bei 2).. war ein wenig schneller, aber auch nicht das wahre.

4.) Als komplette textur mit GL_TEXTURE_RECTANGLE laden.
War für mich persönlich die beste lösung. Extrem schnell und problemlos verwendbar.. und vorallem kann ich hiermit sogar ein 2k Video streamen.
Und ein weiterer Vorteil ist das die Textur nicht zwingend quadratisch sein muß.. :)

Von daher... ich würde dir zum vierten raten, ist das leichteste und schnellste und läuft sogar auf alten Karten relativ problemlos (soweit ich's getestet hab).

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 16:43 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

das hört sich ja interessant an.

Ich hab jetzt zwar das Bild mal in 512px Tiles unterteilt und das klappt auch gut und frisst doch nicht so viel Performance wie ich dachte (so 30 FPS, ca. 15%).

Aber wenns schneller gehen würde wäre das ja auch kein Problem, vor allem das Laden könnte etwas schneller gehen..

Ich benutze zur Zeit die Textures.pas für die Texturen, kann man das dort implementieren via Rectangle zu laden, muss man sich selbst was schreiben oder hast du vielleicht einen fertigen Texturloader der darauf basiert?

Danke + Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 18:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jump&Run ? Cool mal was neues. J&Rs hatten wir glaub ich noch nicht. :D

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 25, 2006 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Passi hat geschrieben:
Ich benutze zur Zeit die Textures.pas für die Texturen, kann man das dort implementieren via Rectangle zu laden, muss man sich selbst was schreiben oder hast du vielleicht einen fertigen Texturloader der darauf basiert

Hi,

ich benutz nen eigenen Textur Loader.. aber an und für sich sollte das auch bei der Textures.pas kein problem sein, einfach alles was da mit GL_TEXTURE_2D steht durch GL_TEXTURE_REACTANGLE_ARB ersetzen und fertig :)

Also auch beim binden, enablen etc..

glEnable(GL_TEXTURE_REACTANGLE_ARB) und glBindTexture(GL_TEXTURE_REACTANGLE_ARB, Tex);

Dann sollte das eigentlich schon direkt gehen wenn ich grad nix vergessen hab :)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 26, 2006 10:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was Sasha bei sich gemacht hat war, dass er eine 512er genommen hatte und die auf den Hintergrund gestreched hat. Er hatte dann wohl im Grafikprogramm einen übertribenen scharfzeichner angewendet und durch die OpenGL Filterung war die Textur dennoch recht scharf. Wenn du keine extremen Details und scharfe Konturen hast sollte das durchaus ohne Probleme machbar sein.

Texture Rectangle. Will ja nicht kleinlich sein aber bei der glBitmap ist es nur eine Eigenschaft namens Target und schon kannst du es als das verwenden als was du willst. Das Target ist sozusagem immer frei wählbar. ;-)


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 » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.009s | 14 Queries | GZIP : On ]