JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=8b3df764ca2b812e56519fc98645104eMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Transparenz bei Surfaces
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Roach
Mini JLI'ler



Anmeldedatum: 12.09.2005
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 10:04    Titel: Transparenz bei Surfaces Antworten mit Zitat

Hallo,

ich möchte 2 Bilder (Kreise), die teilweise voll-transparent sind, auf ein Surface zeichnen.
Die Kreise sollen so gezeichnet werden, dass sie Sich rechts unten berühren.

Das Problem bei dem ganzen ist, dass bei der Funktion D3DXLoadSurfaceFromFile bei mir der Alphakanal nicht beachtet wird.
Die Transparenz geht mir immer verloren.

Auch wenn ich mit ColorKey arbeite wird der eigentlich transparente Bereich einfach nur schwarz eingefärbt, statt transparent zu werden.

Gibt es eine Möglichkeit mehrere transparente Bilder so zu überlappen, dass auch wirklich nur der nicht-transaprente Teil auf die Surface gezeichnet wird?

Würde mich über Antworten sehr freuen.

Vielen Dank.

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 10:49    Titel: Antworten mit Zitat

D3DXLoadsurfaceFromFile kenn ich gar net, hab höchsten mal mit DirectX93D mit Texturen gemacht, das ging wunderbar oder mit DirectDraw8 da hat man halt nur Colorkey, und kann gar nix mit transparenz machen, außer wenn man es selber implementiert.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 11:29    Titel: Antworten mit Zitat

Kopieren von Surfaces mit Colorkey
http://irc.linuxforen.de/patrick/x.php

Jonathan_Klein
Zuviel getrunken?
DirectX93D (Kenn ich net Very Happy)
DirectDraw8 ??? Gibt nur Version 7
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Roach
Mini JLI'ler



Anmeldedatum: 12.09.2005
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 11:46    Titel: Antworten mit Zitat

Danke schön,
aber ich kann erst gar nicht Transparenz von einem Bild auf ein Surface kopieren.
Von einem Surface ins nächste kopieren, wäre erst der nächste schritt.

Trotzdem Danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 13.09.2005, 16:26    Titel: Antworten mit Zitat

Roach
Crossposting? Hilfe adé.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 19.06.2007, 13:19    Titel: Antworten mit Zitat

Ein bisschen veralterter Thread aber ich erlaube mir mal in wieder hervorzuholen....

So ich habe im Moment des selbe Problem...
Colorkey = schwarz
andere Transparent wird so angezeicht wie wenn man es mit paint(des keine transparents kennt) öffnet d.h. sie geht verloren....

Code:
   DIRECT3DDEVICE9->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
   DIRECT3DDEVICE9->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
   DIRECT3DDEVICE9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

Code:

   DIRECT3DDEVICE9->SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
   DIRECT3DDEVICE9->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   DIRECT3DDEVICE9->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);


wobei ich nicht weiß ob sie bei
Code:

DIRECT3DDEVICE9->StretchRect();

oder bei
Code:

D3DXLoadSurfaceFromFile


verloren geht.....

wenn mir irgendjemand helfen kann vielen dank.
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 19.06.2007, 13:37    Titel: Antworten mit Zitat

Was geht nicht? Colorkey?

Ansonsten liegt es daran das Surfaces keine Transparenz unterstützen. Also anstelle von ARGB gibt es nur RGB.

Also wenn ein Pixel nur teilweise transparent sein soll, geht das nur über Texturen. Wenn das Ergebnis einfach auf ein Surface soll könntest du das Renderziel ändern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 19.06.2007, 16:10    Titel: Antworten mit Zitat

Eiso es ist so...
Colorkey... wird alles schwarz...
und Teiltransparents geht nicht...

@chriss danke eine aussage die mich weiter bringt als 5 threads in anderen foren wo dieses thema angesprochen worden ist...
auf teiltransparenz kann ich verzichten es geht mir nur darum das bei einem rechteckicken surface man teile nicht sehen soll...

es soll dann so aussehen:


des was jetzt transparent ist.... ist in dem Bild das geladen wird schwarz(0xFF000000)
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.06.2007, 17:29    Titel: Antworten mit Zitat

Dann zeig doch mal deinen Lade- und Rendercode Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 20.06.2007, 12:14    Titel: Antworten mit Zitat

ok

Lade:
CPP:
   m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
   m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
   m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

D3DXIMAGE_INFO srcInfo;
HRESULT hresult;

DownBoardTexture = GetModulDir()+L"data\\Media\\interface\\DownBoard.PNG";

   
   m_lpD3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer);
   m_lpD3DDevice->CreateOffscreenPlainSurface(DIRECT3D_WIDTH,(int)((DIRECT3D_HEIGHT/768.0f)*192.0f),D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&DownBoardSurface,0);
   D3DXGetImageInfoFromFile(DownBoardTexture.c_str(),&srcInfo);
   hresult = D3DXLoadSurfaceFromFile(DownBoardSurface,NULL,NULL,DownBoardTexture.c_str(),NULL,D3DX_DEFAULT,0xFF000000,&srcInfo);
   
   if(hresult==D3D_OK)
      ::GameDev::GetInstance().AddLog(L"erfolgreich\n");
   else
      ::GameDev::GetInstance().AddLog(L"fehlgeschlagen\n");


Render:
CPP:
   m_lpD3DDevice->SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
   m_lpD3DDevice->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   m_lpD3DDevice->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

   RECT DestRect = {0.0f,560.0f,DIRECT3D_WIDTH,DIRECT3D_HEIGHT};
   m_lpD3DDevice->StretchRect(DownBoardSurface,NULL,pBackBuffer,&DestRect,D3DTEXF_NONE);

_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann


Zuletzt bearbeitet von fast hawk am 20.06.2007, 18:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 20.06.2007, 12:26    Titel: Antworten mit Zitat

Nu so als Vermutung.
Du gibst ja das Format D3DFMT_A8R8G8B8 an. Also ARGB. Und du lädst PNG welches das auch unterstützt.

Jetzt könnte es sein das die Farbe (RGB) des ColorKeys stimmt aber der Alphawert (A) unterschiedlich ist und deswegen das Schwarz darstellt.

Ist aber nur eine Vermutung weil ich das in der Kombination nie verwendet habe. Jedoch hatte ich mal Probleme bei der pixelgenauen Kollisionserkennung, wo einfach die Alphawerte nicht gestimmt hatten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 20.06.2007, 12:54    Titel: Antworten mit Zitat

@Chris danke aber leider nicht...

@all
falls des falsch verstanden wurde der Colorkey geht aber es wird trozdem nur schwarz....(ich hab des ganze auch schon mit einem weißen Colorkey gemacht da wird die fläche aber auch nur schwarz und nicht durchsichtig..)
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.06.2007, 14:19    Titel: Antworten mit Zitat

Was verbirgt sich hinter "LCG_COLORKEY" und hinter "lcgi"?
Wie erstellst du den Backbuffer (bzw. mit welchem Format)? Gut möglich, dass du hier kein ARGB sondern z.B. XRGB hast und Alphawerte beim Kopieren ignoriert werden.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 22.06.2007, 12:40    Titel: Antworten mit Zitat

also ok
COLORKEY = 0xFF000000
lcgi = int(brauch ich um den wechsel von 32 Bit system und 64 Bit system zu realisieren...)

der Backbuffer wird doch mit der Direct3DDevice erstellt..... und wenn er XRGB ist dann bekommen texturen doch auch keine transparenz!?(und die funktionieren...)
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann


Zuletzt bearbeitet von fast hawk am 22.06.2007, 18:52, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 22.06.2007, 17:47    Titel: Antworten mit Zitat

Das der Backbuffer dem XAGB Format angehört bezweifle ich ein wenig Wink

Du meinst sicher XRGB/RGBX

Da du aber wie es scheint, direkt dein Surface mit StretchRect auf den Backbuffer kopieren willst, sollte dir folgendes Wort zu denken geben: kopieren

Damit wäre das was dein Problem darstellt wohl erledigt Wink
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum