ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4421437
Jetzt (Chat):
4 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
Eigenes StretchRect mit Blending und Clipping
Normal
AutorThema
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Eigenes StretchRect mit Blending und ClippingNach oben.
Hallo zusammen,

ich möchte, wie schon im Titel steht, dynamisch in eine Textur malen können. Ich hab mir Stretchrect angeguckt und es macht auch "fast" das was ich erwarte. Kurz zur Info, ich benutze C# und SlimDX mit Direct3D 9.

So sieht die "fast" funktionierende Stretchrect Methode aus
Code:
using (Surface dest_surf = targetTexture.GetSurfaceLevel(0))
{
      using (Surface src_surf = sourceTexture.GetSurfaceLevel(0))
      {
                iRenderSystem.Renderer.GraphicsDevice.StretchRectangle(src_surf, new Rectangle(0, 0, 64, 64), dest_surf, dest, TextureFilter.Linear);
      }
}


Das Ergebnis leider so ...
http://img24.imageshack.us/img24/8367/stretchrectcf0.jpg

Natürlich möchte ich das ganze mit Alpha blending haben. Also war mein nächster Ansatz das ganze mit der ZielTextur als RenderTarget zu machen.
Aber hier passiert rein gar nichts, ein einfaches Clear scheint keinerlei wirkung zu haben

Code:
using(Surface old_render_target = graphicsDevice.GetRenderTarget(0) )
{
       using(Surface texture_target = targetTexture.GetSurfaceLevel(0))
       {
             graphicsDevice.Clear(ClearFlags.Target, new Color4(1, 1, 1, 1), 1, 0);
             graphicsDevice.Present();
       }
       graphicsDevice.SetRenderTarget(0, old_render_target);
}


Eigentlich wollte ich dann mit einem Sprite Objekt die Textur mit Alpha blending reinmalen, aber auch das funktioniert nicht.
Jetzt frage ich mich ob das überhaupt der richtige Weg ist. Es geht halt darum in einem Editor dynamisch in einer AlphaMap für Terrain Blending zu malen.

Falls das noch wichtig sein sollte: targetTexture ist mit dem Flag für RenderTarget erstellt, Debug Ausgaben sind an und zeigen keinen Fehler auch die Rückgabe Werte sind in Ordnung.
Eine kleinigkeit allerdings noch ... mit Debug Dlls, kommt es bei dieser Methode mit den RenderTargets kurz zum aufflackern einer grellen Farbe meist Rot, Grün oder Magenta. Ich kenne das normal nur dann in spielen, wenn der Bildschirm nicht ständig gecleart wird und Debug DLLs eingeschaltet sind.

Also ich hoffe mir kann jemand weiterhelfen.

Bye
Nico
11.02.2009, 10:01:30 Uhr
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
ok, nervermind -.-

Ich lass den Thread mal stehen, als Strafe für meine Blödheit

Na wer findet den Fehler?
11.02.2009, 10:10:05 Uhr
Jörg Offline
ZFX'ler


Registriert seit:
03.12.2005

Nordrhein-Westfalen
133916438
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Mit PIX haettest du schnell gesehen, woran es klemmt. Das zeigt an, wohin gerade gerendert wird.
11.02.2009, 10:26:20 Uhr
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Ich hab nur leider noch nicht gefunden, wie man in Pix einen zielgenauen Frame rendert. Diese Methode da wird aufgerufen wenn man auf das Terrain klickt, ich kann das nicht mit F12 für Pix timen Ich könnte die Methode natürlich jeden Frame aufrufen lassen.

Aber zufrüh gefreut ... Nachdem der RenderTarget jetzt auch gesetzt ist *hust* kann ich nur mit clear reinzeichnen, nicht mit Sprite oder mit nem eigenen vortransformierten Rechteck.
Nuja erstmal weiter gucken, nicht das es wieder ein blöder fehler ist
11.02.2009, 10:33:31 Uhr
Jörg Offline
ZFX'ler


Registriert seit:
03.12.2005

Nordrhein-Westfalen
133916438
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Dazu gibt es doch die PIX Markers .... die sind wirklich hilfreich.
11.02.2009, 10:40:15 Uhr
6SidedDice Offline
Job-Moderator


Registriert seit:
16.10.2002

Nordrhein-Westfalen
161010163
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Also irgendwie werde ich mit Pix nicht warm ... Ich kann keine Vertices debuggen, momentan auch keine PixelShader, entweder das funktioniert nicht richtig mit SlimDX oder ich benutze es falsch. Aber das was in der Doku steht, geht hinten und vorne nicht mit Pix.

Alles was ich rausbekomme ist das mein Quad nach dem Vertex Shader noch sichtbar wäre, aber nichtmehr im Viewport.

http://img6.imageshack.us/img6/9008/pixzk9.th.jpg
11.02.2009, 11:03:13 Uhr
Jörg Offline
ZFX'ler


Registriert seit:
03.12.2005

Nordrhein-Westfalen
133916438
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Ich sag ja nicht, dass es ein Allheilmittel ist

'post-VS' hat nichts mit Sichtbarkeit zu tun (hoechstens, um zu sehen, ob man degenerierte Dreicke erzeugt hat).

Daher die Standard-Fragen:
Matrizen richtig gesetzt (sieht man an den Koordinaten der transformierten Vertices)
Orientierung stimmig
ZBuffer-Flags
Alpha-Ops

Naja, und die kann man alle mit Pix beantworten.
11.02.2009, 11:18:35 Uhr
Schrompf Offline
ZFX'ler


Registriert seit:
04.04.2006

Sachsen
Re: Eigenes StretchRect mit Blending und ClippingNach oben.
Zu PIX eine Warnung: es ist ein seeehr nützliches Tool, das ich auch oft benutze, um solche Fragen zu beantworten wie "Eigentlich ist alles gesetzt: wo sind meine Dreiecke?" Allerdings ist die im August08-SDK enthaltene PIX verbuggt und crasht nur. Ich arbeite momentan mit dem März08-SDK-PIX. Das hat nur gelegentlich Probleme mit Post Processing Effects... da kann ich keine PixelShader debuggen, das Ding ist der Meinung, dass der Pixel die Ergebnisfarbe bereits von Anfang an hat... :-/

An Deinem Code-Schnipsel sehe ich eigentlich nur, dass Du nie auf das Rendertarget umschaltest, dann aber Clear machst und danach zurück aufs alte schaltest. Aber das steckt vielleicht nur in einem anderen Stück Code.

2D-Grafiken kannst Du entweder selbst machen - dynamischen VertexBuffer in ne Klasse kapseln und mit vortransformierten Vertices füttern oder z.B. mit D3DXSprite. Ob es die Klasse in SlimDX gibt, weiß ich nicht. Beide Lösungen rendern aber nicht sofort, sondern sammeln nur die Aufträge, bis Du irgendeine Schlüsselfunktion aufrufst, die das dann in einem Rutsch zeichnet. Evtl. hast Du so eine Sammelfunktion vergessen?
11.02.2009, 13:01:04 Uhr
Dreamworlds Development
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel