|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:00 Titel: Fading |
|
|
Huhu, ich mal wieder
Ich habe heute Nachmittag mal im Forum und per Google gesucht. Finden wollte ich Tipps, wie ich ein Surface zu schwarz ausblenden lassen kann bzw. einblenden.
Habe nichts gefunden, das mit weiterhelfen konnte
In den Threads habe ich diverse Sachen gelesen, daher jetzt evt. eine Frage vorweg: Gibt es eine leichtere Methode, als alle pixel nach und nach mit einem höheren Schwarzanteil zu versehen!?
Nun was ich bislang mache: Ein Animiertes Sprite, das sich per Bilder selber ausblendet, jedoch sind das einige Bilder und da das Sprite 1024x768px groß is, is das nicht die optimalste Lösung *gg*
Daher möchte ich die Grafik in ein Surface packen, soweit ja auch kein Probem, aber kann man das ausblenden lassen?
Entweder zu schwarz, oder noch besser, das bild transparent werden lassen, das das Bild darunter langsam "erscheint"!?
Hat da jemand Tipps und / oder Ideen, in welche Richtung ich in den Dokumentationen forschen kann?
Arbeite mit dem DX9 April07 SDK _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Zuletzt bearbeitet von Asto am 10.06.2007, 17:04, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:03 Titel: |
|
|
ich hab sowas bis jetzt immer so gemacht:
-ein einen Schwarzen Pixel in Paint als Grafik gespeichert
-im Porgramm ein Sprite mit der Grafik dieses Pixels erstellt
-das sprite auf die größe des Backpuffers skaliert
-und Transparent gezeichnet
mfg
Dofter |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:06 Titel: |
|
|
aso hast es also drüber gelegt und das schwarz ein bzw ausgeblendet!?
wie machst du denn die farbe transparent!? ColorKey? Wenn ja bin ich irgendwie zu doof, um das damit transparent zu machen, habe etwas ähnliches schon probiert *kopfkratz* ^^ _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
51m0n JLI'ler
Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:14 Titel: |
|
|
Hi
Du brauchst dafür keine Textur.
Wenn du ID3DXSprite benutzt musst du in etwa wie folgt vor gehen:
Erstelle ganz normal ein Sprite, skalierst es auf die Bildschirmbreite und gibst als ModulateColor die gewünschte Farbe an. Dann schraubst du den Alpha Wert immer weiter hoch, bis er irgendwann auf 0xFF bzw 255 steht.
Wichtig hierbei ist, dass du in der Draw Methode keine Texture angibst, sondern NULL übergibst.
edit:
Bin mir grad irgendwie nicht so sicher ob ID3DXSprite das akteptiert, wenn man bei der Texture NULL angibt. Evtl. musst du da doch auf einen VertexBuffer zurückgreifen. _________________ Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:19 Titel: |
|
|
Colorkey ist was anderes, da du damit nur 100%-ige Transparenz festlegen kannst. Was dein Problem betrifft, würde ich eher in Richtung Alphakanal/Alphawert suchen. Normalerweise sollte man den auch bei D3DX-Sprites angeben können (ich verwende die selbst nicht mehr). Schau mal bei der Draw()-Methode der D3DX-Sprites, da müsste irgendwo eine Parameterangabe einer D3DCOLOR(oder D3DXCOLOR?) sein.
Hiermit kannst du festlegen, mit welchem Farbwert das Sprite moduliert wird. Die Farbwerte kannst du auch in hexadezimaler Schreibweise angeben, wobei die ersten beiden Stellen dem tatsächlichen Alphawert entsprechen. Der Rest ist wie üblich RGB:
<edit>
pfft, jetzt war Simon schneller
</edit> _________________ 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 |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:26 Titel: |
|
|
falls es noch nicht funktioniert, kann es sein, dass dir diverse Render States fehlen, die du noch setzen musst.
CPP: | m_lpDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_lpDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_lpDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR); |
m_lpDevice ist ein Zeiger auf das Direct3D Device. |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 10.06.2007, 17:27 Titel: |
|
|
natürlich das ist es...
CPP: | m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
0,
&m_vRotationCenter,
&m_vPosition,
0xFFFFFFFF); |
letzteres ist halt der farbwert, hier wird alles normal angezeigt
bei 0x8FFFFFFF ist alles transparenter
Da bin ich garnicht drauf gekommen, da zu schauen o.O :X
Vielen Dank
Da kann man ja auch schön die Sprites einfärben...
ui JLI-Forum - Entdekce die Möglichkeiten XD _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 11.06.2007, 10:59 Titel: |
|
|
hmm aber:
ich hatte vorher n 1024x768px großes sprite, was auch auf PCs die 3-4 Jahre alt (mit onBoardgrafik) sind jetzt kein problem war.
aber ich denke ich sollte lieber ein surface verwenden, für so große bilder.
wie würde ich ein fadeout bei einem surface realisieren!?
CPP: | ->StretchRect(Surface, NULL, m_lpBackBuffer, &r, D3DTEXF_NONE); |
Also es scheint nicht so eine einfache Möglichkeit zu geben, wie bei Sprites und wenn ich mich nicht irre, geht bei StretchRect auch transparenz verloren oder nicht!? _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.06.2007, 15:43 Titel: |
|
|
notfalls einfach, 8 Sprites oder so nehmen, und das Bild dann in 8 Teile schneiden. Dann brauchst du keine Surfaces. _________________ https://jonathank.de/games/ |
|
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
|