|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
WesleyPipes Mini JLI'ler
Alter: 42 Anmeldedatum: 19.03.2007 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 19.03.2007, 15:10 Titel: TileMap mit Surfaces |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 19.03.2007, 15:25 Titel: |
|
|
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 |
|
|
WesleyPipes Mini JLI'ler
Alter: 42 Anmeldedatum: 19.03.2007 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 19.03.2007, 15:37 Titel: |
|
|
Hallo, danke erstmal für deine Antwort. nur wie gesagt, ich hab grad mal mit der Materie angefangen 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 ) 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 |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 19.03.2007, 16:14 Titel: |
|
|
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 |
|
|
WesleyPipes Mini JLI'ler
Alter: 42 Anmeldedatum: 19.03.2007 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 19.03.2007, 16:31 Titel: |
|
|
Jop genau das is das Problem
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
hast vielleicht nen Link oder Tip der mir helfen könnt? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 19.03.2007, 16:48 Titel: |
|
|
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 |
|
|
WesleyPipes Mini JLI'ler
Alter: 42 Anmeldedatum: 19.03.2007 Beiträge: 4
Medaillen: Keine
|
Verfasst am: 19.03.2007, 17:15 Titel: |
|
|
Hmmm dann werd ich mir mal die VertexBuffer zu gemühte führen. Mal schaun wie das funzt.
danke erstmal |
|
Nach oben |
|
|
|
|
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
|