OpenGL - Wie texturen verwalten?
Übersicht

PhillipKBetreff: OpenGL - Wie texturen verwalten? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Heyho Leute ![]() Mein VBO problem scheint gelöst zu sein, ich habe alles wie ich es benötige. Falls jemand intresse hat, werde ich versuchen, ein Tutorial darüber zu verfassen. Ich für meinen Teil widme mich jetzt dem nächsten problem - Texturen für meine Tri's. Da ich darauf erpicht bin, möglichst viel FPS zu fahren, habe ich noch diverse verbesserungsvorschläge an mein eigenes Programm. Gestern habe ich mich ein wenig mit Texturkoordinaten auseinandergesetzt und die Koordinaten angaben - so denke ich - verstanden. Nun frage ich mich, wie ich meine Texturen als Grafiken ablege, um sie optimal zu nutzen. Das problem zb was ich habe ist: BlitzMax: [AUSKLAPPEN] glBindTexture(GL_TEXTURE_2D, GLTextur) braucht jedes mal ein wenig meiner Kostbaren CPU ![]() Ich weiß nicht, was im hintergrund steht. Sollte nur eine variable umgeschaltet werden, ergibt sich das problem. Wird mehr gemacht, möchte ich das vermeiden. Um das ganze zu vermeiden, möchte ich möglichst selten meine Textur wechseln. Da liegt die vermutung nahe, alle Grafiken sinnvoll auf einer größeren Textur anzuordnen. Allerdings ist eine weitere idee die ich umsetzen möchte, das ausnutzen der Wiederholfunktion von OGL textur-koordinaten. Gebe ich einen Koordinatendifferenz von > 1 an, so wird die Texutr wiederholt dargestellt. Im moment teste ich mit Sektoren, die 64x64 Kacheln haben, welche jeweils etwa 16pixel groß sind. Sollten nun eine oder mehrere Kacheln neben bzw übereinander liegen, so sollen ein paar Triangles aus meinem IBO geschmissen werden und die uv koordinaten entsprechend angepasst werden. So habe ich statt 30 kacheln mit der selben Textur (nebeneinanderliegend) am ende nurnoch 1 gestreckte kachel mit 30fach widerholter Textur auf der X achse (bzw in der U - koordinate). In meiner vorstellung von meinem landschaftsmodell zeichne ich dadurch nurnoch gut und gerne die halben vertices. Der sinn dahinter ist fraglich, mir geht es ums lernen. Und eine solche Technik lässt sich bestimmt noch einmal im Leben brauchen. ![]() Tja, nur wie baue ich jetzt meine Texturen zusammen? ----- Zum oben genannten problem in meinem Vorstellungsrahmen habe ich mir 2 mögliche Wege ausgedacht: ![]() ![]() Um maximale Flexibilität zu erreichen, fände ich persönlich den Pixmap-in-'frames'-aufteilen-weg besser. Nur die frage, gibt es grenzen in OGL? Draw2D verwöhnt einen. Ich weiß nicht, ob es ein maximum an geladenen Texturen gibt, noch ob es in mengen Extreme Geschwindigkeitsverluste Zeigt, wenn ich gute 500x die Textur wechsel, nur für die Landschaft. Ich hoffe, ich konnte meine vorschläge ausreichend erklären und erhalte Kontruktive kritik. Vielleicht gibt es ja auch schon genau zu dieser Problematik ein Workarround mit einem ganz anderen ansatz? Ich freue mich jedenfalls auf antworten. --- Edit 17.07.2011 - 08:12: Mir ist grade aufgefallen, das mein vorhaben mit den zerteilten Pixmaps garnicht möglich zu sein scheint. Grund hierfür ist, das ich momentan mehrere Arrays im RAM sowie in der Graka halte, welche meine Vertices, farben und UV-koords wiederspiegeln. Das ganze wird als batzen per glDrawElements gezeichnet. Es dürfte also kaum möglich sein, jedem Triangle seine eigene Textur zuzweisen. Nun bin ich vollkommen ratlos - was tue ich nun? ![]() Angenommen ich habe 2x2 tiles á 16x16 pixel. Tile 1 hätte also U von 0.0 bis 0.5, V von 0.0 bis 0.5. Kann ich ogl mitteilen, das ich diesen bereich öfters zeichnen möchte? Irgendwie? :/ Mit freundlichen grüßen, Phillipk |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay PhillipK
Ambesten ist es wenn du eine große Texture benutzt wo alle Tiles drauf sind Dann machst du dir ein Sektor-Object mit 8x8 Quads und dieses als glGenLists Jedes Quad (o. 2Triangles) bekommt seine 4 UV Koordienaten. Das ist schnell und unkomplieziert. http://wiki.delphigl.com/index.php/Hauptseite http://wiki.delphigl.com/index.php/glGenLists PS: Du kannst mich auch über ICQ anschreiben wenn nötig. ![]() |
||
shootermakerBetreff: Re: OpenGL - Wie texturen verwalten? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
PhillipK hat Folgendes geschrieben: Heyho Leute
![]() Mein VBO problem scheint gelöst zu sein, ich habe alles wie ich es benötige. Falls jemand intresse hat, werde ich versuchen, ein Tutorial darüber zu verfassen. ... Aber Hallo! ![]() Also so ein Tutorial wäre echt super, da ich genau an dem gleichen Problem stehe. |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ach was solls, aber erwartet keine meisterleistung ![]() Ich habe mittlerweile soviel ahnung von OpenGl wie ein toast. Ein bisschen aber ich werd nicht wirklich wissen, wovon ich rede ![]() Ich werd mich mal dran versuchen, mein erstes Tutorial zu schreiben ![]() ps: Das wird allerdings ein wenig brauchen, ich habe noch nie ein Tutorial verfasst und war auch nicht immer der beste Schreiberling. Wenn es fragen gibt, könnt ihr erstmal per Privatnachricht kontakt mit mir aufnehmen ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Matthias hat Folgendes geschrieben: Hay PhillipK
Ambesten ist es wenn du eine große Texture benutzt wo alle Tiles drauf sind Dann machst du dir ein Sektor-Object mit 8x8 Quads und dieses als glGenLists Jedes Quad (o. 2Triangles) bekommt seine 4 UV Koordienaten. Das ist schnell und unkomplieziert. http://wiki.delphigl.com/index.php/Hauptseite http://wiki.delphigl.com/index.php/glGenLists PS: Du kannst mich auch über ICQ anschreiben wenn nötig. ![]() Heyho Matthias! Mit großen Texturen habe ich meine bedenken. Nach ein paar tests ist mir dennoch eine Methode eingefallen, die ich für mein vorhaben verwenden könnte. Leider impliziert diese, das ich jede Textur indirekt 2x laden muss. Ich plane, meine IBO's dementsprechend anzupassen, das ich eins habe, wo die kacheln normal dargestellt werden und ein weiteres pro Textur, welches größere bereiche umspannt. Zum einen würde ich dann eine "AtlasTextur" oder wie man sie nennt, nutzen, um mit dieser die verschiedenen Kacheln darzustellen und zum anderen jede Textur einzeln. Sollte ich in meiner routine genügend große bereiche feststellen, welche Am ende 12 oder mehr Tri's einsparen würden, so würde ich die Textur der entsprechenden Pixmap entnehmen und als eigene Textur laden. Diese bereiche werden dann durch 2-4 Tri's dargestellt und mit einer entsprechend gekachelten, wiederholten textur gezeichnet. Zumindest soweit die theorie ![]() Ich habe im netz eine Möglichkeit gefunden, den Texturindex direkt in die UV koordinaten mit einzutragen. Hierzu lege ich einfach U,V, Index als Texture-coords-array an. Allerdings habe ich keine ahnung, was ich aktivieren muss, um die texturen auch laden zu lassne. Bisherige ergebnisse brachten allerdings keinen erfolg. ![]() Naja, muss ich eben dranbleiben. Irgendwann habe ich meine idee einer riesen Tilemap realisiert =D Ps: Im worst case (jede kachel besteht aus 2 Tris, 4 verts, 8 uv und 12 color - werten) bin ich immerhin auf 250-300 fps (bei 3x3 sektoren á 64x64 Kacheln). Damit bin ich schon ganz zufrieden ![]() Alles weitere ist nur ein austesten der möglichkeiten. Mfg, PhillipK |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group