JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Fading

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 10.06.2007, 17:00    Titel: Fading Antworten mit Zitat

Huhu, ich mal wieder Embarassed

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 Sad

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!? Shocked

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:19    Titel: Antworten mit Zitat

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:
Zitat:
0xFFFFFFFF


<edit>
pfft, jetzt war Simon schneller Wink
</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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 10.06.2007, 17:27    Titel: Antworten mit Zitat

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 Smile
bei 0x8FFFFFFF ist alles transparenter Smile

Da bin ich garnicht drauf gekommen, da zu schauen o.O :X

Vielen Dank Smile

Da kann man ja auch schön die Sprites einfärben...
ui Very Happy JLI-Forum - Entdekce die Möglichkeiten XD Thumb Up
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 11.06.2007, 10:59    Titel: Antworten mit Zitat

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!? thinking
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.06.2007, 15:43    Titel: Antworten mit Zitat

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
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
Seite 1 von 1

 
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