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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

24.06.2009, 09:48

Direct3D9 Screenshots (RGB-/ Depth Textures)

Hallo,

ich muss wissen wie man mit Direct3D9 screenshots in beliebigen Größen machen kann, damit ich diese vorallem für Shader verwenden kann.
Auch Tiefen Texturen (in OpenGL mit "GL_DEPTH_COMPONENT") brauche ich für z.B. Shadow Mapping.

Ich weiß nur ungefähr, dass man das in das Surface einer Texture schreiben muss. Ich verstehe das in D3D noch nicht soganz.

Kann mir jemand helfen?

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

2

24.06.2009, 12:16

mit "screenshot" meinst du bestimmt, das aktuell im backbuffer liegende bild.

zum einen kann man mit dev->GetBackBuffer an das aktuelle bild kommen.
wenn du das dann in eine textur umkopieren willst / musst, holst du dir
erst das surface der textur und kopierst den backbuffer mit dev->StrechRect
rein (unterstützt verschiedene auflösungen).

natürlich kannst du auch von vornerein mit dev->SetRenderTarget deine
textur setzen, in die dann gezeichnet wird.

mit dev->GetDepthStencilSurface kommst du auch an den z-buffer

[ was ist eigentlich der unterschied zwischen GetRenderTarget und GetBackBuffer? ]
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

24.06.2009, 14:39

Genau, das meine ich. Muss man erst noch EndScene aufrufen oder kann man immer mit "GetBackBuffer" den aktuellen FarbPuffer auslesen?

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

4

24.06.2009, 15:04

vor dem EndScene.

ich fahre allerdings mt GetRenderTarget ganz gut (anstatt GetBackBuffer)

das sieht dann ungefähr so aus

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
IDirect3DSurface9 *source, *target;

dev->GetRenderTarget(0, &source);
texture->GetSurfaceLevel(0, &target);

HRESULT res = dev->StretchRect(source, 0, target, 0, D3DTEXF_NONE);
            
source->Release();
target->Release();


damit kopiert du den inhalt des backbuffers in das erste miplevel von "texture".

ot:

vote 4 syntaxhighlighting bei DirectX interfaces :D
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

24.06.2009, 21:24

Das willst du nicht. Was du willst ist in eine Textur rendern. Google mal nach "Render to Texture Direct3D"...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

25.06.2009, 08:51

Doch das will ich ;)

Ich will nämlich nicht nur in die Texture rendern, ich will das Bild vielleicht (je nach dem was ich gerade brauche) auch auf dem Screen sehen.
Das render-to-texture ist sicher auch ganz praktisch, aber den BackBuffer auslesen zu können ist etwas praktischer, denke ich.

mfg Lukas

7

25.06.2009, 13:06

Render-To-Texture ist eigentlich genau das was du suchst^^

GetBackBuffer geht natürlich auch, aber mit einem seperaten RenderTarget ist man noch wesentlich flexibler als mit dem BackBuffer.

Werbeanzeige