 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Roach Mini JLI'ler
Anmeldedatum: 12.09.2005 Beiträge: 2
Medaillen: Keine
|
Verfasst am: 12.09.2005, 09:04 Titel: Transparenz bei Surfaces |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.09.2005, 09:49 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Roach Mini JLI'ler
Anmeldedatum: 12.09.2005 Beiträge: 2
Medaillen: Keine
|
Verfasst am: 12.09.2005, 10:46 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 19.06.2007, 12:19 Titel: |
|
|
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 |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 19.06.2007, 12:37 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 19.06.2007, 15:10 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 20.06.2007, 11:14 Titel: |
|
|
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, 17:55, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 20.06.2007, 11:26 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 20.06.2007, 11:54 Titel: |
|
|
@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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 13:19 Titel: |
|
|
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 |
|
 |
fast hawk Senior JLI'ler

Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 22.06.2007, 11:40 Titel: |
|
|
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, 17:52, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 22.06.2007, 16:47 Titel: |
|
|
Das der Backbuffer dem XAGB Format angehört bezweifle ich ein wenig
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  _________________ "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 |
|
 |
|
|
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
|