![]() |
AW: Shape Wars - Version 1.0
@EWeiss
Texturewechsel ist langsam! Glaubs mir, wenn es um solch eine Menge geht, ist das Wechseln dieser stets zu meiden! |
AW: Shape Wars - Version 1.0
Zitat:
|
AW: Shape Wars - Version 1.0
Zitat:
Zitat:
Beispiel: (Ja mein Loader) ;)
Delphi-Quellcode:
So jetzt habe ich alle meine Texturen zur Laufzeit im Array DanceTex und kann damit Arbeiten.
DanceTex[0].FullName := TextureDir + '\LightDance\' + 'oblique.jpg';
DanceTex[0].ID := 1; DanceTex[0].Square := False; DanceTex[1].FullName := TextureDir + '\LightDance\' + 'flare0.jpg'; DanceTex[1].ID := 2; DanceTex[1].Square := False; DanceTex[2].FullName := TextureDir + '\LightDance\' + 'crown.png'; DanceTex[2].ID := 3; DanceTex[2].Square := False; DanceTex[3].FullName := TextureDir + '\LightDance\' + 'lightdance.png'; DanceTex[3].ID := 4; DanceTex[3].Square := False; DanceTex[4].FullName := TextureDir + '\LightDance\' + 'superbeam.jpg'; DanceTex[4].ID := 5; DanceTex[4].Square := False; DanceTex[5].FullName := TextureDir + '\LightDance\' + 'podium.jpg'; DanceTex[5].ID := 6; DanceTex[5].Square := False; DanceTex[8].FullName := TextureDir + '\LightDance\' + 'disco.png'; DanceTex[8].ID := 9; DanceTex[8].Square := False; MakeMultipleTexture(high(DanceTex) - low(DanceTex), DanceTex); Da ist nix mehr mit wechseln und Listen brauch ich dafpr auch nicht. So etwas kann ich quasi für jeden meiner Gegner erstellen aber nur 1 mal und nicht während des spiels. Vom ladevorgang merkt man so gut wie nichts. wobei die 6 und 7 für die Frames der AVI Datei reserviert sind. Hier noch code..
Delphi-Quellcode:
procedure DrawAnim;
begin glLoadIdentity(); glEnable(GL_BLEND); glEnable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glBlendFunc(GL_ONE, GL_ONE); gluLookAt(0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // Animation start if (PlayState = 3) or (PlayState = 0) then begin if not OpenPAnim then begin if OpenSAnim then CloseAVI; if FileExists(SAnim) then begin ActiveFrame := -1; AVIStart := GetTickCount(); OpenAVI(PWideChar(SAnim), DanceTex, 7); OpenSAnim := False; OpenPAnim := True; end; end; if DanceTex[7].Texture > 0 then begin glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glTranslatef(0.0, -0.7, -7.5); GetAVIFrame; glBindTexture(GL_TEXTURE_2D, DanceTex[7].Texture); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex3f(-2.34, 2.8, -0); glTexCoord2f(1, 1); glVertex3f(2.34, 2.8, -0); glTexCoord2f(1, 0); glVertex3f(2.34, -2.8, -0); glTexCoord2f(0, 0); glVertex3f(-2.34, -2.8, -0); glEnd; glPopMatrix(); glPushAttrib(GL_ALL_ATTRIB_BITS); end; end else begin if not OpenSAnim then begin if OpenPAnim then CloseAVI; if FileExists(PAnim) then begin ActiveFrame := -1; AVIStart := GetTickCount(); OpenAVI(PWideChar(PAnim), DanceTex, 6); OpenPAnim := False; OpenSAnim := True; end; end; if DanceTex[6].Texture > 0 then begin glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glTranslatef(0.0, -0.7, -7.5); GetAVIFrame; glBindTexture(GL_TEXTURE_2D, DanceTex[6].Texture); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex3f(-2.34, 2.8, -0); glTexCoord2f(1, 1); glVertex3f(2.34, 2.8, -0); glTexCoord2f(1, 0); glVertex3f(2.34, -2.8, -0); glTexCoord2f(0, 0); glVertex3f(-2.34, -2.8, -0); glEnd; glPopMatrix(); glPushAttrib(GL_ALL_ATTRIB_BITS); end; end; glDisable(GL_BLEND); // AVI Animation // auf den Attributstack abgelegte Zustandsvariablen wieder herstellen //glPopAttrib; end; gruss |
AW: Shape Wars - Version 1.0
Man kann sich das umständliche Vorgruppieren glaube ich auch sparen, indem man mehrere Texturen in eine Textur packt (also quasi ein Spritesheet) und nur die Textur-Koordinaten anpasst.
Disclaimer: Bin OpenGL-Anfänger ;) |
AW: Shape Wars - Version 1.0
Zitat:
Zeige mir das bitte. ;) gruss |
AW: Shape Wars - Version 1.0
@EWeiss - Ich glaube du hast mich nicht verstanden.
Das Erstellen der Texturen geschieht 1 Mal. Für jede Texture wird eine TTextureEntities Instanz erzeugt. Zur Laufzeit werden Gegener erstellt und passend zu ihrer Texture in die entsprechende TTextureEntities Instanz eingefügt. Somit muss man beim Zeichnen der TTextureEntities die Texture nur 1 x einbinden (@EWeiss - einbinden <> neu laden! In OpenGL müssen Texturen per glBindTexture eingebunden werden!!!) Hach herjee |
AW: Shape Wars - Version 1.0
Zitat:
|
AW: Shape Wars - Version 1.0
Zitat:
Zum Beispiel kann ich einfach TGA laden ohne semitransparenz. Die ist schön klein und besonders fpr partikel geeignet. Wenn ich aber als Beispiele PNG nehme habe ich die möglichkeit und kann zusätzliche Effekte wie glow, blur , Transparenz auf 80% setzen oder was auch immer in der Texture direkt ändern ohne dafür auch nur ein Char code extra schreiben zu müssen. Das wären also dann schon 2 Texturen. NEhme ich noch JPG hinzu für den Hintergrund dann sind es schon 3. Eine Texture die sich niemals ändert kann man also ruhig als jpg.. einladen. nur einige Beispiele. Zitat:
Du meinst mit wechseln das einbinden.. hab ich verstanden :) Das hat aber nichts mit dem einladen der Texturen ansich zu tun. gruss |
AW: Shape Wars - Version 1.0
Zitat:
xD |
AW: Shape Wars - Version 1.0
@EWeiss: Der GPU ist es doch egal, ob die Texturdaten aus einem JPG, einem PNG oder einem TGA stammen, denn der Texture-Loader wandelt sie ja in ein einheitliches Format.
Es sollte kein Problem sein, zumindest alle Sprites in eine Textur zu packen. Den Hintergrund kannst man ja meinetwegen in eine Extratextur packen. Aber auch so verringert sich die Anzahl der Texturwechsel erheblich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz