Von SDL zu DirectX - Grundlegende Informationen benötigt



  • Hallo miteinander,

    ich habe vor sehr langer Zeit tatsächlich eine Engine auf Basis von SDL geschrieben, mit der ich auch einen Pokémon-Klon programmiert habe. Da ich jedoch nie so viel Spaß hatte mit der SDL bin ich am überlegen, da ich das Projekt eh nie portieren werde, DirectX (9) zu nutzen. Dazu habe ich um das einfach auszuprobieren grundlegende Beispiele gefunden, wie man Direct3D initialisiert und das Fenster färben kann oder mit ID3DXFont Objekten Texte ausgeben kann und solch einfache Spielereien.

    Mein Problem ist jedoch, dass ich kaum nützliche Informationen finden kann, wie ich die Grafik für meine Engine auf Basis von DirectX umsetzen kann. Prinzipiell lief das in SDL so, dass ich aus Tilesets und eigenen Mapfiles mir zügig Surfaces zusammengebastelt habe und diese dann direkt rendern konnte. Meine bisherige Suche ergab, dass ich wohl oder übel viele Ebenen mithilfe von Dreiecken in 3D erzeugen und texturieren darf um dann die Kamera von oben draufschauen zu lassen. Aber wirklich hilfreichen Code oder Dokumentation welche Funktionen ich da nützliche finden würde gab es nicht. Habt ihr da Vorschläge wo ich mich da schlau lesen kann und mir ein Bild machen kann, ob das für mich umsetzbar ist?

    Btw. ich weiß, dass D3D low-level ist im Gegensatz zu SDL, aber es ist durchaus interessant sich auch mit solch komplexeren Themen zu beschäftigen.

    Gruß.



  • Für das was du vorhast musst du nicht in 3D Rendern. Es gibt durchaus die Möglichkeit in 2D zu rendern. Dafür wird der Depth Buffer ausgeschalten so das man keine Probleme mit Ebenen hat (man muß natürlich selbst für die richtige Reihenfolge sorgen). Bei den nötigen Funktionen kann ich dir leide rnicht weiterhelfen, ich hab ewig nichtmehr mit DX9 gearbeitet, nutze nurnoch DX11, aber vielelicht soltest du eins der vielen Bücher für DX9 mal lesen.



  • Nachdem ich nun weiter durch etliche Foren gesucht habe, kam ich nun zu einem tollen Ergebnis, denn ich habe ein fantastisches Buch gefunden, welches genau zu meinen Bedürfnissen passt. Es handelt sich dabei um Beginning Game Programming, Third Edition von Jonathan S. Harbour. Dieses Buch ist eine gute Einführung in die 2D (!) Programmierung und hat mir sehr dabei geholfen einen guten Einstieg zu finden.

    Was ich im Wesentlichen jetzt gemacht habe, ist mit folgenden Fetzen Inhalte darzustellen:

    IDirect3DSurface9		*backbuffer = nullptr;
    IDirect3DSurface9		*surface = nullptr;
    
    // Init()-Methode
    d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
    
    D3DXIMAGE_INFO info;
    HRESULT hResult = ::D3DXGetImageInfoFromFile("File.png", &info);
    
    hResult = d3ddev->CreateOffscreenPlainSurface(
    	info.Width,
    	info.Height,
    	D3DFMT_X8R8G8B8,
    	D3DPOOL_DEFAULT,
    	&surface,
    	nullptr);
    
    if(!SUCCEEDED(hResult))
    	return FALSE;
    
    hResult = ::D3DXLoadSurfaceFromFile(
    	surface,
    	nullptr,
    	nullptr,
    	"File.png",
    	nullptr,
    	D3DX_FILTER_LINEAR,
    	0,
    	nullptr);
    
    if(!SUCCEEDED(hResult))
    	return FALSE;
    
    // In der Game Loop
    d3ddev->BeginScene();
    RECT rect = { 0, 0, 980, 570 };
    d3ddev->StretchRect(surface, nullptr, backbuffer, &rect, D3DTEXF_NONE);
    d3ddev->EndScene();
    

Anmelden zum Antworten