JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=e78e26c533775dc83ffd431091135fd7Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

TileMap mit Surfaces

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
WesleyPipes
Mini JLI'ler


Alter: 42
Anmeldedatum: 19.03.2007
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 19.03.2007, 16:10    Titel: TileMap mit Surfaces Antworten mit Zitat

Hallo, ich bin neu in der DX Programmierung.

Ich hab ein Problem mit Surfaces. Ich hab folgendes versucht.

eine LPDIRECT3DSURFACE9 erstellt und dahinein ein Bild geladen.
eine weitere LPDIRECT3DSURFACE9 und dahinein ein anderes Bild geladen.

Soweit so gut, wenn ich die Oberflächen in den backpuffer kopier werden sie sauber angezeit.

Nun zu meinem Problem.
Ich möchte eine TileMap mit diesen beiden Oberflächen erstellen. Aber ich möchte nicht jedesmal nach dem BeginnScene die TileMap neu im Backpuffer erstellen, sonder wollte eine Dritte Oberfläche erstellen in der bei Programmstart die TileMap erstellt wurde und dann einfach nach dem BeginnScene diese Oberfläche kopiert wird.


Leider sagt StretchRect "Invalid Call" nachdem ich versucht habe Bild1 in die TileMap zu Kopieren.
Nach den Remarks in der Hilfe vermute ich das es daran liegt, weil Bild1 und Bild2 in die TileMap "Stretche".

Wie kann ich das Problem lösen?

Vielleicht kann mir ja jmd helfen.

Danke im Vorraus.

WesPip
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 19.03.2007, 16:25    Titel: Antworten mit Zitat

Hi, wie genau führst du denn den StretchRect Call aus?

Wenn du TileMaps rendern möchtest würde ich eine etwas andere herangehensweise empfehlen:

Du nimmst eine grosse Textur in der du all deine Tiles legst, schön angeordnet, dann erstellst du dir einen Vertexbuffer und baust dann deine Karte auf, je ein Quad für ein Element und ein Element nimmt genau ein Texturkoordinatenset welches du so anlegst das genau 1 Tile angezeigt wird, das erspart dir massig Rendercalls und Zeit, wobei deine Methode wenn du sie richtig ausbaust auch recht effektiv sein kann. Besonders wenn du viele Spielereien damit noch unternimmst.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
WesleyPipes
Mini JLI'ler


Alter: 42
Anmeldedatum: 19.03.2007
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 19.03.2007, 16:37    Titel: Antworten mit Zitat

Hallo, danke erstmal für deine Antwort. nur wie gesagt, ich hab grad mal mit der Materie angefangen Wink Sprich ich arbeite das Buch durch und Bastel ein wenig an eigenen Beispielen rum.


Daher hab ich das auch so gemacht wie die Surface BSP ausm Buch.

ich hab noch nicht die ganze TileMap (ich hoffe das der ausdruck richtig is Wink ) erstellt. Sondern wollt erstmal testen ob das funzt was ich mir da ausgedacht habe.

CPP:
mDestRect.left = 0;
mDestRect.top = 0;
mDestRect.bottom = fFieldHeight;
mDestRect.right = fFieldWidth;

pDevice->StretchRect(pRoadSurface,NULL,pMapSurface,&mDestRect,D3DTEXF_NONE);



pRoadSurface enthält ein kleines Bitmap eines Straßenstücks welches ich in die Mapoberfäche pMapSurface kopieren wollte (mit Stretching).

Ich muß an der stelle aber Skalieren, da das spielfeld eine Variable anzahl an Feldern haben soll. Mal ne Map mit 20*20 mal nur 15*15 oder so.


dieser StrechtRect schlägt allerdings fehl Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 19.03.2007, 17:14    Titel: Antworten mit Zitat

Wie hast du denn due beiden Surfaces erstellt, die art und weise (also Einstellungen) besagen nämlich ob StretchRect so wie du es anwendest (um tatsächlich zu verzerren) möglich ist oder nicht, in der DirectX Dokumentation gibt es dazu auch eine Tabelle.

Aber ich nehme doch an das du den inhalt von pRoadSurface wiederholend angezeigt haben möchtest und nicht gross gestreckt, oder?

Textursurface auf textursurface geht zb nicht ebensowenig wie Textursurface auf Off-Screen plaun Surface
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
WesleyPipes
Mini JLI'ler


Alter: 42
Anmeldedatum: 19.03.2007
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 19.03.2007, 17:31    Titel: Antworten mit Zitat

Jop genau das is das Problem Smile

CPP:
    // Informationen über die geladene Grafik holen
    D3DXGetImageInfoFromFile( FILE_GRASS,&mSrcInfoGrass);
   
    // Offscreen-Surface anlegen
    pDevice->CreateOffscreenPlainSurface(
                                        mSrcInfoGrass.Width,
                                        mSrcInfoGrass.Height,
                                        D3DFMT_A8R8G8B8, 
                                        D3DPOOL_DEFAULT, 
                                        &pGrassSurface,   
                                        0);               

    D3DXLoadSurfaceFromFile(pGrassSurface,   
                            NULL,             
                            NULL,             
                            FILE_GRASS,       
                            NULL,             
                            D3DX_FILTER_NONE,
                            0,               
                            NULL);




Wie kann ich meinen gewünschten effekt anders erhalten?? Ich möchte mir eigentlich bloß nen Hintergrund zu Programmstart erstellen lassen und den dann nach dem BeginnScene in den Backpuffer kopieren. Anschließen d dann normal fortfahren sprites zeichnen etc.


Du hast vorhin was geschrieben von VertexBuffer anlegen. Ich bin wie gesagt noch ganz amfang und konnt damit nicht so viel anfangen Sad

hast vielleicht nen Link oder Tip der mir helfen könnt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 19.03.2007, 17:48    Titel: Antworten mit Zitat

Textur auf OffScreen geht absolut nicht, nichtmal wenn du nicht stretchen würdest.

Lade dir doch einfach eine grosse Textur wäre auch eine Möglichkeit.

Wenn du erfahrener bist kannst du ja die etwas "fortschritlicheren" Methoden ansehen.

Wie zb die mit dem Vertexbuffer.

Du erstellst dir einfach eine art Schachbrett, jede Kachel steht für sich alleine, also 4 Vertexe und 6 Indicies (für den Indexbuffer) und dein Brett besteht zb aus 100 solcher Kacheln.

1 Brett = 100 Kacheln (10x10)
1 Kachel = 4 Vertexe

Jede Kachel kann dadurch ohne das es zu Filterproblemen kommt (Farbwerte benachbarter Texel der textur werden interpoliert) ein Tile aufnehen.

1 Tile ist zB der Weg oder das Gras oder ein Stück Wald.
Auf eine TileMap packst du dann zB 64 Tiles zu je 32x32 Pixel grösse. Deine Tilemap wäre dann 256x256 gross und lässt sich so überall schön verwenden.

Der RPG Maker arbeitet so zum Beispiel.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
WesleyPipes
Mini JLI'ler


Alter: 42
Anmeldedatum: 19.03.2007
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 19.03.2007, 18:15    Titel: Antworten mit Zitat

Hmmm dann werd ich mir mal die VertexBuffer zu gemühte führen. Mal schaun wie das funzt.

danke erstmal
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum