Bagrundsbillede med openGL

Tags:    c++

Jeg har et problem med baggrunde til et spil jeg er ved at lave. Jeg bruger OpenGL, og jeg har én stor tekstureret firkant som baggrund. Problemet er at uanset hvor lille jeg laver mit baggrundsbillede så hakker spillet. Selve spillet er en form for tetris, så der er ikke særlig meget geometri. Spillet er lavet i 2D, og jeg har sat viewporten til 800x600 med glOrtho. Min computer har 1024 MB RAM og en 1,73 GH processor. Jeg håber at der er nogen der kan hjælpe mig.



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Selvfølgelig, altid til tjeneste ;)

Bare spørg, hvis du render ind i flere problemer, det kan jo være, jeg kan lære noget af det selv :P

1101110100010110000101000001

Killers don't end up in jail - they end up on a high-score!

[Redigeret d. 19/01-06 09:51:53 af Nicolai Lyster Fersner]



Det er formentlig bare et fillrate problem (for så vidt jeg husker, kan så stor en firkant i forhold til viewporten tvinge selv nyere gfx kort i knæ), hvilket kan løses meget, meget enkelt.
Du skal blot dele den store firkant op i mindre dele, for eksempel 4x4 (eller 16x16, 32x32 - prøv dig frem) firkanter i stedet for 1 stor.

Du kan afprøve, om det er din fillrate, der udgør et problem, ved at skifte fra fuldskærms tilstand til vindues tilstand (dvs. så det opfører sig som et normalt vindue) - hvis din fps (går ud fra, at du er i stand til selv at måle dette? ellers må du jo lige spørge igen) ændrer sig markant, er din fillrate problemet.

1101110100010110000101000001

Killers don't end up in jail - they end up on a high-score!

[Redigeret d. 17/01-06 23:25:59 af Nicolai Lyster Fersner]



Jeg har et problem med baggrunde til et spil jeg er ved at lave. Jeg bruger OpenGL, og jeg har én stor tekstureret firkant som baggrund. Problemet er at uanset hvor lille jeg laver mit baggrundsbillede så hakker spillet. Selve spillet er en form for tetris, så der er ikke særlig meget geometri. Spillet er lavet i 2D, og jeg har sat viewporten til 800x600 med glOrtho. Min computer har 1024 MB RAM og en 1,73 GH processor. Jeg håber at der er nogen der kan hjælpe mig.

Hvis det er 2D så brug ikke OpenGL. Brug SDL med hardware surfaces i stedet.
http://www.libsdl.org



1. Jeg får nogenlunde det samme resultat uanset om jeg bruger 1 eller 100 firkanter. Tilgengæld har jeg fundet ud af at det er størelsen på billedet der er noget i vejen med. Hvis jeg bruger et stort billede går det galt. Hvorfor? Jeg troede da at man normalt brugte store billeder til texture, for så at vælge det ud fra det som man skulle bruge. Det er vel ikke anderledes med baggrunde?

2. Det vil jeg kigge på, men jeg har også tænkt mig at bruge baggrundsbilleder i 3D, så jeg vil meget gerne have at vide hvordan dette normalt gøres.

[Redigeret d. 18/01-06 17:17:27 af Kristian]



Hvor stort er dit billede, og hvilket gfx kører du da med?

Det kan måske forklare, hvor problemet ligger.

Og ellers er næste skridt (hvis ikke dit billede burde være stort nok til at skabe denne forskel på baggrund af dit gfx) jo nok måske, at skulle se din kode, i hvert fald den del af den, der udgør render funktionen.

Og brug i øvrigt et billede, der har dimensioner, som kan divideres med 2 uden at få noget til rest (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 mv). Men jeg går ud fra, at du ikke bruger de nyere grafikkorts metoder til at vise "non-power-of-2" teksturer, så kan vel ikke udgøre den forskel? (selvom jeg dog ikke tror rent personligt, det kan have så stor en indvirkning, som du påstår at have, selvom teksturen er meget stor).

Baggrundsbilleder i 3D er ligesom i 2D, du skal bare bruge en flade med en tekstur, der lodret er parallel med din viewport (så dens position kommer an på, hvordan du har opsat din viewport's matrix).

1101110100010110000101000001

Killers don't end up in jail - they end up on a high-score!

[Redigeret d. 18/01-06 20:38:05 af Nicolai Lyster Fersner]



Nu har jeg fundet problemet. Det var ganske rigtigt billedet der var i forkerte dimensioner. Blot ved at ændre dimensionerne fra 800x600 til 1024x1024 gik jeg fra en fps på nået nær 0,2 til noget lignende det jeg havde før jeg gik igang med baggrunden.
Laver du lige et svar så jeg kan give dig point?



t