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

killmichnich

unregistriert

1

14.07.2009, 20:08

Surface -> transparenz?

Hiho,
ich wollte mir ein transparentes Surface machen. Hab ich mir gedacht, das kann doch garnicht so schwer sein, und ich habs so gemacht:

C-/C++-Quelltext

1
2
3
Direct3D->GetDevice()->CreateOffscreenPlainSurface(Width, Height, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &Surface, 0);
RECT r = {0, 0, Width, Height};
Direct3D->GetDevice()->ColorFill(Surface, &r, D3DCOLOR_ARGB(100, 0, 0, 255));

Hab ich einfach mal statt D3DCOLOR_XRGB() D3DCOLOR_ARGB eingefügt, was ja theoretisch auch funktionieren sollte. Tuts aber leider nicht, wenn ich das so zeichne ist das 100% sichtbar.
Das gleiche Problem hatte ich, wenn ich eine transparente Bilddatei in das Surface laden will mittels
D3DXLoadSurfaceFromFile(Surface, NULL, &r, Hintergrund, NULL, D3DX_FILTER_NONE, 0, NULL);
Das funktioniert auch nicht :/

Was muss ich machen, dass das Ding transparent wird? oO

MfG Killmichnich

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

14.07.2009, 20:16

hast du alphablending an? samplerstates/blendstates hauen hin?

killmichnich

unregistriert

3

14.07.2009, 20:20

dazu kann ich dir jetzt nicht viel erzählen .... oO
wo muss ich das denn "einschalten"?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

14.07.2009, 22:06

naja du kannst nich einfach sagen ja ich mach da alpha und dann rendert der alpha. wenn dann musst du direct3D sagen, ich rendere jetzt mit alphablending (IDirect3DDevice::SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);). ansonsten den texturstages setzen^. informier dich einfach mal en bisschen, ein paar tuts lesen.

5

15.07.2009, 09:56

meiner meinung nach werden surfaces nicht einfach wie texturen gerendert.
surfaces werden direkt, also jeder pixel für sich auf den bildschirm gelegt, was auch heißt, dass renderstates ignoriert werden. da diese methode schon etwas älter ist, meiones wissens aus directDraw zeiten, ist alpha blending mit unterliegenden pixeln nur duch ein anderes pixel-farb-format (z.b. ARGB anstelle von RGB) nicht möglich.

Meine empfehlung: nimm für 2d Grafiken Sprites: die sind einfach, komfortabel, haben alphablending, und sind um einiges schneller als surfaces.

wenn du allerdings bei surfaces bleiben willst: du kannst pixel mit hilfe des colorkeys nicht anzeigen lassen, sprich du kannst eine beliebige farbe auf transparent schalten.

killmichnich

unregistriert

6

15.07.2009, 13:26

aso ok danke =)

Werbeanzeige