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

Paddy

Frischling

  • »Paddy« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Essen

  • Private Nachricht senden

1

24.11.2006, 17:42

StretchRect auch mit Alphakanal

Hi,

um 2D HUD-Elemente mal eben über den Screen zu zeichnen ist ja StretchRect ganz praktisch, aber....

Gibts da ne Möglichkeit dabei irgendwie noch ne Alphamaske zu verwenden um die Hud-Teile dann abzurunden (z.B. ne Minimap in Form von einem Bullauge oder sowas), oder kann ich da mit der Funktion nix machen? (Welche andere würde denn helfen?

Quellcode

1
2
3
4
5
6
7
8
//Bringt hier ein A8R8G8B8 was?
hResult = lpD3DDevice->CreateOffscreenPlainSurface(256,256,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,
&SurfaceHudKreis,NULL);

hResult = D3DXLoadSurfaceFromFile(SurfaceHudKreis,NULL,NULL,"hudbackmap.bmp",NULL,D3DX_DEFAULT,0,NULL);

lpD3DDevice->StretchRect (SurfaceHudKreis,NULL,pBackBuffer,NULL,
D3DTEXF_NONE);

Thanx im Voraus

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.11.2006, 17:45

Soweit ich weiß, geht das mit keiner dieser 2D-Funktionen.
Dazu musst du halt ein normales 2D-Rechteck mit dem Bild als Textur zeichnen (via DrawPrimitive[UP]).

Paddy

Frischling

  • »Paddy« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Essen

  • Private Nachricht senden

3

24.11.2006, 19:25

Ist das nicht ne olle DDraw Routine?
(MSDN schmeißt da nur was altes von 1997 raus).

Das kann dann doch nicht der Weisheit letzter Schluss sein?!?
Kann ich nicht eigentich nach dem Rasterizer(wenn ich mich nicht irre) fertig ist solche 2D Sachen direkt auf den BackBuffer zeichnen/kopieren?

Wie gesagt, es geht mir halt darum nach dem 3D Kram über den fertigen Backbuffer HUD-Elemente zu zeichnen und warum da noch mit 3D Sachen wie Planes loslegen, wenn ich nur in den Buffer schreiben muß.
Soll ja nix skaliert/beleuchtet/gedreht/whatever werden...
Ich will nur das Element (sagen wir mal ein 200x50 Ausschnitt einer Surface) mit soften abgerundete Kanten (durch ne Alphakante) auf den Fertigen Backbuffer kopieren...

Muß ich für sowas 2 dimensionales echt die 3D-Planes nochmal aus der Kiste holen? (Steig grad von GL um und steh da mit dem Prinzip etwas auf dem Schlauch).

Paddy

Frischling

  • »Paddy« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Essen

  • Private Nachricht senden

4

24.11.2006, 21:57


(Link)


Um meine Frage etwas deutlicher zu machen mal mit nem kleinen optischen Beispiel:

Ich hab das orange Hudelement wie oben im Bild (jaja, die Farbe ist grässlich...ist einfach nur zum besprechen und orange kann man gut sehen).

Das orange "Fenster" ist in dem Moment ne IDirect3DSurface9 (SurfaceHud), in die die Schrift und der Balken gepakt werden. Gehen wir mal davon aus, dass alles in der SurfaceHud-Surface drinliegt und die einfach nur noch auf den Backbuffer kopier werden muß...aber:

Beim Kopieren dieser Surface in den Backbuffer soll diese Teil-Transparent werden...und zwar entsprechend des weiß zu grauen Kastens im unteren Bild.
Wie kann ich nun SurfaceHud in den Backbuffer kopieren und bei dem kopieren den Alphakanal beachten?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

24.11.2006, 21:57

wie david schon gesagt hat...
StretchRect is nicht unbedingt was man da verwenden sollte (sofern das überhaupt geht, das kann nämlich nicht unbeding zwischen allen surfacetypen herumkopiern).
normalerweise macht man sowas indem man ein 2D rechteck mit der entsprechenden textur rendert.

evtl. solltest du dir mal D3DFVF_XYZRHW anschauen ;)

Paddy

Frischling

  • »Paddy« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Essen

  • Private Nachricht senden

6

24.11.2006, 23:15

...Das D3DFVF_XYZRHW ein Flexible Vertex Format ist, das ist mit auch klar und das ich über den RHW Wert die Sachen wohl irgendwie untransformiert rendern kann auch...

Nur mit welcher Member von welcher Klasse?
Sind die Positionen dann nicht Fließkommazahlen anstelle von echten 2D ganzzahl Positionen? (wie gesagt..stehe etwas auf dem Schlauch...)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

24.11.2006, 23:48

Zitat von »"Paddy"«

Ist das nicht ne olle DDraw Routine?

Nein, DrawPrimitive ist eine Direct3D-Routine und hat mit DirectDraw nichts am Hut.
Draw[Indexed]Primitive[UP] ist quasi der einzige Weg, überhaupt irgendetwas mit Direct3D zu rendern, mal abgesehen von diesen Methoden wie StretchRect etc..

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

25.11.2006, 12:57

obwohl StretchRect() nicht wirklich dazu gedacht ist etwas zu "rendern"...

Paddy

Frischling

  • »Paddy« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Essen

  • Private Nachricht senden

9

29.11.2006, 18:46

Mal ne andere Frage zu StretchRec():

Wenn ich eine Offscreensurface habe, diese der Screensize entspricht, ich die Screensize geprüft hab(ob die GK die Auflösung macht):
Kann ich dann einfach nicht "power-of-two" Grafiken laden (z.B. 800x600) und diese dann per StretchRect in die Offscreensurface laden/ kann ich davon ausgehen das die GK das dann mitmacht?
Die Offscreensurfaces müßten doch eigentlich den Bildschirmausmaßen entsprechen dürfen, oder? (ist ja kein Texturebuffer, oder wird der trotzdem so behandelt?)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

29.11.2006, 19:50

http://msdn.microsoft.com/archive/defaul…StretchRect.asp

Zitat

Stretching is not supported if the destination surface is an off-screen plain surface but the source is not.


was hast du für ein problem damit non power of 2 texturen zu laden!?

Werbeanzeige