Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.01.2004, 23:13

DirectX : Surface mit Bild füllen

Hallo zusammen,

ich hab folgendes Komisches Problem : Ich will auf einen Surface (Oberfläche) ein bild mit der Funktion: D3DXLoadSurfaceFromFile kopieren.
Nun eigentlich funktioniert es auch. Aber nur wenn ich ein bestimmtes Bild in einem bestimmten Ordner nehme. Wenn ich das Bild in einen anderen Ordner kopiere und es von dort laden will zeigt er mir nichts an also nur den BackBuffer !

Am besten zeige ich euch mal ein Beispiel :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    #define FILE "../../Media/fighter_top.png"  


    D3DXGetImageInfoFromFile(FILE,&ImageInfo);

        lpD3DDevice = Direct3D.GetDevice();     
        lpD3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&lpBackBuffer);

        lpD3DDevice->CreateOffscreenPlainSurface(ImageInfo.Width,ImageInfo.Height,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&lpD3DSurface,0); //Surface erstellen
        D3DXLoadSurfaceFromFile(lpD3DSurface,0,0,FILE,NULL,D3DX_DEFAULT,0,0);   //Surface mit Bild füllen

        
        
        Direct3D.BeginScene();  //Szene Beginnen

        RECT DestRect = { 100, 100, 100 + ImageInfo.Width, 100 + ImageInfo.Height };

        lpD3DDevice->StretchRect(lpD3DSurface,NULL,lpBackBuffer,&DestRect,D3DTEXF_NONE);


        Direct3D.EndScene();    //Szenen Ende


Das Beispiel tuts. Aber wenn ich nun das Bild in den Ordner der *.exe kopiere und FILE mit "fighter_top.jpg" benne geht es wieder nicht. Wenn ich das Bild in den Ordner dadrüber kopiere und FILE mit "../fighter_top.jpg" defniere gehts es immer nocht nicht ! Nur in dem Media Funktioniert es !

Ich weiss nicht recht ob ihr das jetzt verstanden habt wenn nicht : Der kann das Bild nur in dem einen Ordner laden und meine Frage ist : Wieso ? ???

NoName

Treue Seele

Beiträge: 118

Beruf: Student

  • Private Nachricht senden

2

24.01.2004, 23:32

Warum heißt die Datei im Beispiel "fighter_top.png" und unten plötzlich "fighter_top.jpg"?

3

25.01.2004, 10:20

Ja sry hatte mich hier jetzt vertan aber im Code ist es richtig, aber funzt immer noch nicht.

4

26.01.2004, 19:26

Von wo aus startest du dein Programm? Wenn du es von der IDE aus startest kann es nicht gehen, weil dann die Verzeichnisse nicht stimmen. Das Stammverzeichnis fuer dein Projekt ist das Projektverzeichnis selber. Wenn deine EXE also z.B. im Debug Ordner liegt muss dein Pfad so lauten

Quellcode

1
#define FILE "./Debug/fighter_top.png"
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

26.01.2004, 19:50

ich hab mal ne Frage... wozu sind surfaces eigentlich gut? ich hab schon viel drüber gehört... ist ein Surface so etwas wie ein Rechtck mit einer Textur drauf - also rein 2D??? Muss man das Bild wie eine Textur behandeln... ;D danke schonmal im Voraus

6

26.01.2004, 19:57

Zitat

ist ein Surface so etwas wie ein Rechtck mit einer Textur drauf - also rein 2D??? Muss man das Bild wie eine Textur behandeln
Ganz falsch. Was du meinst sind Texturen die auf einem Viereck gerendert werden. Wie spielt keine Rolle. Ein Surface ist einfach nur ein Container fuer ein Bild. Z.B. kannst du da deine Urlaubsbilder hineinkopieren und dann darstellen.

Zitat

wozu sind surfaces eigentlich gut?
Seit DX8 haben die Surfaces etwas an Bedeutung verloren. Die meisten verwenden Surfaces dafuer um den BackBuffer auszulesen um z.B. ScreenShots zu realisieren.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

26.01.2004, 20:16

Achso ich wusste nicht das MSVC vom Projekt-Verzeichnis ausgeht. Ich dachte immer vom Debug-Ordner also da wo die Exe eigentlich liegt.

Danke für die Hilfe

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

26.01.2004, 20:35

@Ready, ja geht immer vom Hauptverzeichnis aus

@Dragonmaster, danke erstma für die Anworten ;D , ich werde mir das mal näher anschauen, haste evtl. noch ein paar links?

Werbeanzeige