.| Autor | Beitrag |
|---|---|
|
000 17.04.2002, 16:04 The_real_KANE |
Hi, Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
001 17.04.2002, 17:27 [RMen]OneStone |
Welches denn? -- georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ |
|
Profil || Suche |
|
002 17.04.2002, 18:28 Diablo_bth |
naja ich könnte dir gl-vertex-arrays empfehlen. Solltest du z.B. deine Polygon-Daten als double speichern, so solltest du besser auf floats umsteigen! Dinge wie z.B. Backface-Culling solltest du besser nicht OpenGL überlassen, sondern direkt prüfen ob die Kamera hinter einer Polygon-Ebene liegt - da muss das Zeug nicht durch die ganzen "GL-Pipelines". Ich seh schon ein, dass sich meine Hinweise eher auf 3D-Shooter-Engines beziehen, aber vielleicht kannst du damit trozdem was anfangen. Die Sache mit dem Vising-System müsste eigentlich bei Strategiespielen einfachre zu realisieren sein als z.B. bei einer "normalen" 3D-Engine. Vielleicht kannst du da noch was verbessern... -- |
|
Profil || Suche |
|
003 17.04.2002, 19:00 Tron |
@Diablo_bth: var und selbstgebrautes backfaceculling passt net zusammen, ausserdem muss es net 'durch die ganzen pipelines', backfaceculling wird schon sehr frueh vorgenommen, ausserdem spart das ungemein fillrate (das ist ja wohl das problem bei ner tnt2) --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
004 17.04.2002, 20:36 The_real_KANE |
hmmm, ich hab in sachen vising und allgemein openGL net so viel erfahrung, dass ich evtl. super algorythmen habe. naja, mein vising ist eigentlich n rel. komische sache, vorallem weil es noch n kleinen fehler hat, der aber nicht so schlimm ist. Und zwar ist das, wenn ein array (was meine karte darstellt) nur sagen wir 80 elemente in x und y hat, ich aber schon eins mehr male, damit der übergang flüssig ist, dann kann es ja passieren, dass ich irrgendwann mal am ende der karte bin. deswegen hab ich das n bissl "größer" und vielleicht net grade intiligent gemacht, aber was solls. Eigentlich wollte ich den fehler auch vermeiden, aber da muss ich nochmal pfeilen. Hier ist es nun: if(scroll_x == (((MAP_H)<<6)+screen->h)) max_x = 0; else max_x = 1; ty = ((scroll_y>>6) + (screen->h>>6) + 1+ max_y); MAP_H und MAP_W sind die definitionen der größe der karte. x und y die loopvariablen, und scroll_x und scroll_y die linke obere ecke des bildschirms. screen ist ein zeiger vom typ SDL_Surface. mehr ist da ja eigentlich net... --Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
005 17.04.2002, 21:12 gerk |
@ trk: wegen den problemen in der schule, mach dir nix draus, das liegt an den graka-treibern. „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
006 17.04.2002, 21:29 The_real_KANE |
Hmm, jo, kannst echt Recht haben :D Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
007 18.04.2002, 14:59 Prefect |
Also, ich hab auch ne TNT2, und die kann den kompletten Bildschirm bei wenig Overdraw - dafür alle Blits mit Alphablending (!) - locker 100x pro Sekunde refreshen. CPU ist dabei ein Athlon 550 Mhz. Es wird also wohl eher daran liegen, wie du die Daten selbst übermittelst. Aber selbst Vertex Arrays und Display Lists sollten bei so einer Konfiguration nicht notwendig sein - wie gesagt, bei meinem 550Mhz/TNT2/AGP gibt's keine Probleme mit ganz normalen glVertex-Calls. Schritt 1 ist also, die Treiberversion usw. zu prüfen (glGetString). Womöglich verwendest du nen Softwarerenderer... Schritt 2 ist es, unnötige Statechanges zu vermeiden. glEnable/glDisable und glBindTexture sind absolute Performancekiller. Wenn du (was bei einem RTS naheliegend ist) Tiles zum rendern verwendest solltest du in Erwägung ziehen, alle (bzw. viele) Tiles in eine einzige große Textur zu packen. Schritt 3 ist es, die Spielelogik selbst zu optimieren. Evtl. verwendest du ungünstige Datenstrukturen zum Speichern der Karte... um das einigermaßen zu bewerten bräuchte man aber mehr Infos (inklusive Code/Header). Display-Lists: Für ein Spiel mit Tilemap kannst du sehr gut Displaylists für die Karte selbst verwenden. Dabei würde ich immer quadratische Tilebereiche zu einer Displaylist zusammenfassen - je nach dem, wie groß die Tiles sind. Dann rufst du einfach immer die Lists auf, deren zugehörige Polygone zumindest teilweise sichtbar sind (bei quadratischen Flächen ist das simpel). Natürlich mußt du dann noch die Modelmatrix entsprechend modifizieren (glTranslate) um zu scrollen. Wie gesagt würde es mich aber wundern, wenn dieser Schritt bei einem 600Mhz/TNT2-Setup für ordentliche Performance notwendig wäre. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
008 18.04.2002, 16:05 The_real_KANE |
Hmm, danke Prefect, bist echt super :D Die Welt geht unter, gehen sie mit! Dieser Beitrag wurde am 18.04.2002 um 16:11 von The_real_KANE bearbeitet. |
|
Profil || Suche |
|
009 18.04.2002, 16:37 Prefect |
Tilemap bedeutet einfach, daß die Karte des Spiels intern aus "Planquadraten" zusammengesetzt ist. Tile heißt Kachel, und genau das ist es auch. Quasi alle Strategiespiele verwenden Tiles. Vertex Array ist genau das was es besagt. Ein Array aus Vertices. Du übergibst OpenGL damit ein einziges Mal ein Vertex Array an OpenGL, und in Zukunft teilst du OpenGL nur noch mit, welche Indices des Arrays fürs Rendern verwendet werden soll. Damit kann man die benötigte Grakabandbreite für Geometriedaten reduzieren. Display Lists: Ich sehe ja ein, daß du so wenig wie möglich zeichnen willst. Aber vergleiche z.B. mal folgenden Code (pseudo-Code):
mit:
Angenommen du verwendest 48x48 Tiles auf einem 1024x768-Bildschirm. Das ergibt 22x17=374 sichtbare Tiles. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
010 18.04.2002, 16:49 The_real_KANE |
ahhh, ok, verstehe, thx Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
011 18.04.2002, 16:56 Tron |
das ist FALSCH was du eventuell meinst ist CVA (Compiled Vertex Array) 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
012 18.04.2002, 17:36 [RMen]OneStone |
Hmm, interessant. georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ |
|
Profil || Suche |
|
013 18.04.2002, 18:08 Tron |
wo koennte man wohl infos ueber opengl bekommen? hm... www.opengl.org ? nee... das waer' ja zu einfach --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 18.04.2002 um 18:09 von Tron bearbeitet. |
|
Profil || Suche |
|
014 18.04.2002, 20:15 The_real_KANE |
Hmmm, wie ist das eigentlich mit textur größen? Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
015 18.04.2002, 20:58 The_real_KANE |
Ach, und noch eine "dumme?" frage. Die Welt geht unter, gehen sie mit! Dieser Beitrag wurde am 18.04.2002 um 20:59 von The_real_KANE bearbeitet. |
|
Profil || Suche |
|
016 18.04.2002, 21:25 Diablo_bth |
1. also mit der 256x256-Textur-Größe trifft zumindest für ältere Vodoo-Karten zu ( hab ich zumindest mal gehört ). Generell kann man sagen, dass 1024er Auflösungen nicht gerade Performance-steigernd sind, deswegen habe ich z.B. in meiner Engine ein Limit von 512x512 Pixeln eingestellt. ( ältere Engines wie z.B. HL sogar auf 256x256 ) 2. Auf Nehe werden unter anderem Fonts vorgestellt, die einfach auf eine font-Textur zugreifen anstatt auf die windoof-fonts. Dies müssten eigentlich ohne Probleme auf anderen Plattforman zu realisieren sein, da sie nur auf die gl-API angewiesen sind. -- |
|
Profil || Suche |
|
017 19.04.2002, 15:02 Prefect |
Das maximale Texturgröße kannst du per glGetInteger abfragen (GL_MAX_TEXTURE_SIZE oder so). Tron, eigentlich hab ich mich ja schon immer gefragt, was Vertex Arrays sollen ;) Für solche 2D-Anwendungen scheinen sie auf jeden Fall relativ sinnlos. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
018 19.04.2002, 15:21 Tron |
der funktionsoverhead ist RIESIG btw: probiert NIEMALS sowas riesiges in ne displaylist zu stopfen, davon sinkt die fps nur, da so grose vertexhaufen nicht gut verarbeitet werden koennen, dh. die fps sind niedriger (zumindest koennen das die detonator nicht) <edit> 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 19.04.2002 um 15:23 von Tron bearbeitet. |
|
Profil || Suche |
|
019 22.04.2002, 21:17 The_real_KANE |
Hi, ich habe ein neues Problem, aber evtl. passt es hier ja sogar. initialisiere_opengl(); ... if(!game_running) würde sowas funktionieren? und wenn ja, weis jemand ungefähr wie (namen von funktionen etc). Und würde es das Spiel sehr ausbremsen? Die Welt geht unter, gehen sie mit! |
|
Profil || Suche |
|
020 23.04.2002, 17:46 Prefect |
Sollte funktionieren. Andererseits wäre es wohl sinnvoller, sich das Speichern der Matrizen zu sparen, und einfach, vom Prinzip her, folgendes zu machen: Setze Projektionsmatrix Sicht aufs Spielfeld Immerhin mußt du ja nur zweimal die Matrix verändern, und die Matrix für die Sicht aufs Spielfeld wird sich sowieso sehr oft ändern, daß es nicht lohnt die Matrix zwischenzuspeichern. Die Matrix für Ortho sollte OpenGL relativ schnell erstellt haben, so daß sich ein Speichern wahrscheinlich auch hier nicht lohnt. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |

