In Textur Rendern

FSA

Erfahrenes Mitglied
So Hallo jetzt kommt endlich der Thread mit dem In Textur Rendern^^
Habe folgenden Render Code: ( Bitte Kommentare lesen )
C++:
// Dieses D3D ist vergleichbar mit dem Device also g_pDevice->.... iSt halt in meine Engine gekapselt
// Als erstes alles in eine Textur Rendern	
	Matrix		mProjection;
//...

	D3D->SetRenderTarget(0,pRenderSurface);
	D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(150, 150, 165), 1.0f, 0);

	D3D->BeginScene();

	// Alles Mögliche Rendern ( Das Geht auch versprochen habe es ja getestet^^ )
	// Auch view world und translationsmatrix wird gesetzt

	// Szene beenden
	D3D->EndScene();



	// Dann die Textur, in die gerendert wurde, rendern

	D3D->SetRenderTarget(0,pBackBuffer);
	D3D->Clear(0,
                           NULL,
                           D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                           D3DCOLOR_XRGB(0,0,0),
                           1.0f,
                           0);
	D3D->BeginScene();

	D3D->SetTexture(0,pRenderTexture);

	// Wie das Funktioniert ist egal es geht^^
	mProjection = MatrixProjection(CALC_DEG_TO_RAD(60.0f), D3D.GetAspect(), 0.1f, 300.0f);
	D3D.SetTransform(D3DTS_WORLD,MatrixIdentity()); // MatrixIdentity Ist quasie der Null wert
	D3D.SetTransform(D3DTS_PROJECTION, mProjection);

	D3D->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);

D3D->EndScene();
In Init steht auser laden noch das:
C++:
D3D->CreateTexture(256,
										256,
										1,
										D3DUSAGE_RENDERTARGET,
										D3DFMT_R5G6B5,
										D3DPOOL_DEFAULT,
										&pRenderTexture,
										NULL);

	pRenderTexture->GetSurfaceLevel( 0, &pRenderSurface );

	D3D->GetRenderTarget(0,&pBackBuffer);
Die Variablen die es noch zu wissen gibt:
LPDIRECT3DTEXTURE9 pRenderTexture;
LPDIRECT3DSURFACE9 pRenderSurface,pBackBuffer;
So das wars danke fürs lesen^^
Nun mein Problem ist das der Bildschirm schwartz bleibt :(
Weiß jemand warum? Danke
PS: Der Bildpuffer wird automatisch Scihtbar gemacht( Ist in einer Schleife)
PPS: Ich garantiere das Jede Funktion einwandfrei geht. ;)
MfG
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

wo setzt du denn den Vertex Buffer und das Vertex Layout? Ansonsten ist für das Zeichnen eines Full Screen Quads eine perspektivische Projektionsmatrix eher weniger geeignet. Setze die Matrizen alle auf Einheitsmatrizen und zeichne das Rechteck in normalisierten Gerätekoordinaten (Eckpunkte (-1, -1, 0, 1), (-1, 1, 0, 1), (1, -1, 0, 1), (1, 1, 0, 1)).

Grüße,
Matthias
 
Also habe es jetzt geschafft hat wirklich an dem VertexBuffer gelagen.
Aber ein Problem gibt es. Das Fertige bild ist sehr unscharf und vorallem so naja schelchte qualität eben. Screenshot als anhang!!
AA Ist aus also die Kanten sind egal. Aber es ist alles unscharf und man hat so komische wellen in den Farben! Warum?
Danke
 
Die Unschärfe kommt vermutlich daher, dass deine Textur nur 256×256 Pixel groß ist. Und die Banding-Artefakte („Wellen“) werden durch das Texturformat (D3DFMT_R5G6B5) verursacht, das mit 16 Bit Auflösung nicht alle Zwischenfarben darstellen kann.

Grüße,
Matthias
 
Ok Danke nur wenn ich bei der Größe D3D_DEFAULT angebe bekomme ich bei
pRenderTexture->GetSurfaceLevel( 0, &pRenderSurface );
Ne Zugriffs verletztung und wenn ich 512x512 mache bleibt alles schwarz...
Danke
MfG
 
Naja also ich dacht das bei Default oder 0 die Größe der auflösung genommen wird. Und Nein ich überprüfe den Rückgabewert noch nicht.
Wiekann ich das eigentlich mit der Farbe lösen? Denn nicht jede Graka unterstützt 32 bit oder?
Danke
MfG
 
So nun habe ich das Problem mit der Auflösung hingekriegt aber selbst wenn ich die Textur in der Gleichen auflösung erstlle ist das Bild Leicht unscharf! Außer dem habe ich jetzt ein weiteres problem! AntiAliasing bzw Multisampling funktioniert nicht wenn ich in die Textur Rendere. Wenn ich den Zweiten render Schritt auskommentiere und auch nicht den Render Target auf die Textur setze geht AA wieder!
Wieso?
Bracuhe Hilfe^^
Danke
MfG
 
So nun habe ich das Problem mit der Auflösung hingekriegt aber selbst wenn ich die Textur in der Gleichen auflösung erstlle ist das Bild Leicht unscharf!
Zeichnest du das Rechteck denn in normalisierten Gerätekoordinaten? Wie sehen die Texturkoordinaten aus?

Außer dem habe ich jetzt ein weiteres problem! AntiAliasing bzw Multisampling funktioniert nicht wenn ich in die Textur Rendere.
Richtig. Du musst mit CreateRenderTarget ein Render Target mit den gewünschten Multisampling-Einstellungen anlegen und in dieses zeichnen. Anschließend kopierst du den Inhalt in deine Textur (mit StretchRect). Diese kannst du dann wie bisher rendern.

Grüße,
Matthias
 
Zurück