JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Tile-based 2D-Game: Besser Surface oder Texture

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



Anmeldedatum: 17.06.2006
Beiträge: 16

Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 14:01    Titel: Tile-based 2D-Game: Besser Surface oder Texture Antworten mit Zitat

2 Fragen:
1. Für ein 2D-Spiel mit einer Tile-based Map, benutze ich da besser Surface für die Tiles oder Sprites(Textures)?
2. Wie kann ich das mit der Transparenz lösen? Muss ich alle 24bit BMP in 32bit BMP's konvertieren? wenn ja, womit? (MS-Paint geht nicht ebenso Paint.net). Wie stelle ich da die Transparenz ein? Kann ich nicht sowas wie Colorkeys mit Surfaces benutzen? Mit LoadSpriteFromFileEx (o.ä.) gehts ja, aber mit Surfaces?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 14:46    Titel: Antworten mit Zitat

1. Hängt davon ab. Möglich ist prinzipiell beides, meinst du die DD-Surfaces? Beide Wege haben ihre Vor- und Nachteile. Mit den klassischen Surfaces wirst du auf Colorkeying zurückgreifen müssen, bei der Variante Vertices + Textur, hast du hardwarebeschleunigtes Alphablending/testing, Skalieren, Rotieren etc., was u.U. mit weniger Arbeit zu ansehnlicheren Ergebnissen führt, das hängt aber von deinen eigenen Ansprüchen ab.

2. Lässt sich auch schlecht so pauschal beantworten, wenn du irgendwelche Fix-und-Fertig-Lade-Routinen verwendest, musst du natürlich schauen, welche Formate unterstützt werden etc., und BMP 24Bit ist normalerweise ohne Alphachannel. Wenn du selber etwas schreibst, ist es natürlich dir überlassen, wie du die Bilddaten interpretierst. BMPs sind aber prinzipiell für Spiele eher ungeeignet. Ich kann dir TGAs oder PNGs empfehlen, welche auch Transparenzeffekte unterstützen. Für's Konvertieren kannst du eigentlich fast jedes Grafikprogramm verwenden - außer Paint eben. :P, GIMP verwende ich gerne. Unter OpenGL gibt's etwas, das nennt sich "Alphatesting", kann man die selben Ergebnisse wie mit Colorkeys erreichen, gibt es sicher auch unter D3D, vielleicht interessiert dich das ja...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
njubee
Mini JLI'ler



Anmeldedatum: 17.06.2006
Beiträge: 16

Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 15:22    Titel: Antworten mit Zitat

1. Aber mit Colorkeying ist es doch nur möglich, die transparenten Pixel auf schwarz zu setzen, oder? Ich hab's mal mit einem grauen Hintergrund probiert.
2. Als Anfänger benutze ich natürlich vorgefertigte Laderoutinen, da mir dazu sonst das Hintergrundwissen fehlt.
Das mit "Alphatesting" werde ich mal für D3D (ver-)suchen.
GIMP finde ich sch...lecht, aber wenn's den sein muss. Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 15:40    Titel: Antworten mit Zitat

njubee hat Folgendes geschrieben:
1. Aber mit Colorkeying ist es doch nur möglich, die transparenten Pixel auf schwarz zu setzen, oder? Ich hab's mal mit einem grauen Hintergrund probiert.

Andersherum. Du wählst dir eine Farbe aus, die als Colorkey fungiert. Alle Pixel in dieser Farbe sind hinterher transparent(zu 100% - ein Zwischending wie beim Alphablending gibts bei Colorkeys nicht).
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
njubee
Mini JLI'ler



Anmeldedatum: 17.06.2006
Beiträge: 16

Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 17:41    Titel: Antworten mit Zitat

Ich habe folgendes versucht: (Codeausschnitte)
1. Bildschirm grau:
Code:

    // Farbe die beim Loeschen verwendet werden soll
    Direct3D.SetClearColor(D3DCOLOR_XRGB(100, 100, 100));

2. Magenta-Farbe als Colorkey:
Code:

    D3DXLoadSurfaceFromFile(m_lpSprites1,      // Oberflaeche in die die Grafik geladen werden soll
                            NULL,             // Palette
                            NULL,             // Zielrechteck
                            FILE_SPRITES1,        // Dateiname der Grafik
                            NULL,             // Quellrechteck
                            D3DX_FILTER_NONE, // Filter
                            0xFFFF00FF,                // Colorkey
                            NULL);

Als Ergebnis hab ich ein Sprite auf grauem Hintergrund, bei dem die Magenta-Farbe durch schwarz ersetzt ist. Das meinte ich damit. Es steht auch so im Buch, das die Pixel eben schwarz sind und nicht transparent (in meinem Fall grau). Muss ich noch was machen (mit ALPHAirgendwas)?
Ich benutze ein 24bit-Bitmap. Muss ich 32bit verwenden, oder konvertiert DX das wenn ich bei CreateOffscreenPlainSurface() als Format D3DFMT_A8R8G8B8 angebe?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 20:28    Titel: Antworten mit Zitat

soweit ich weiß behandelt D3D den Colorkey als schwarze Farbe mit FF im Alphawert. Demnach müsstest du noch folgenden Renderstate fürs Rendern setzen:
CPP:
d3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);

Nachm Rendern gegebenenfalls wieder auf FALSE zurücksetzen. Falls das net klappt, versuch mal diese beiden States noch zu übernehmen. DIe sind aber glaub ich eh standard und nur fürs richtige Alphablending gedacht. Aber, kann ja sein...
CPP:
d3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );
d3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );


Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 01.08.2006, 20:59    Titel: Antworten mit Zitat

Ich habe gerade mal ein bisschen die MSDN durchstöbert, also Alphatesting wird über den Renderstates 'D3DRS_ALPHATESTENABLE' aktiviert, zudem muss eine Testfunktion mittels 'D3DRS_ALPHAFUNC' und ein Referenzwert mittels 'D3DRS_ALPHAREF' gesetzt werden. MSDN hat dazu auch ein Beispiel parat:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/Alpha_Testing_State.asp
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.08.2006, 23:02    Titel: Antworten mit Zitat

Ich würde als Bildformat tga empflehlen, falls du D3D benutzen möchtest.
BMP ist glaub ich nicht wirklcih für 32 Bit vorgesehen, tga schon. Außerdem ist es herrlich einfach zu laden und kann theoretisch eauch ein wenig kkomprimiert sein.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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