JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Bild in C++ manipulieren?
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 09.09.2003, 11:50    Titel: Antworten mit Zitat

hmm....

ich habs mal versucht... und es scheint zu funkionieren (drücken wirs mal vorsichtig aus Wink )

Den Code habe ich so angepasst:
Code:

void CSprite::SetAlpha(BYTE Alpha)
{
   D3DLOCKED_RECT LockRect;

   m_AnimationVec[m_CurrentImage]->LockRect(0,&LockRect,0,0);

   DWORD* p = (DWORD*)LockRect.pBits;

   LockRect.Pitch /= 4;

   for(int i=0;i<m_Height;i++)
   {
      for(int j=0;j<m_Width;j++)
      {
         DWORD CurColor = *p;
       if (CurColor != 0x00ffffff)
       {
         CurColor &= 0x00FFFFFF;
         CurColor += ((int)Alpha) << 24;
         *p = CurColor;
       }         
       p++;
     }
      p += LockRect.Pitch - m_Width;
   }

   m_AnimationVec[m_CurrentImage]->UnlockRect(0);
}


Mal sehen wie lange das funktioniert Very Happy

MfG

Philipp Böing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 21:31    Titel: Antworten mit Zitat

als ich mein Projekt mit der Alpha Blend Animation mal auf meinem altem Computer ausgeführt habe (ich hab 2, einen guten, einen schlechten zum Testen) bemerkte ich den sehr großen Geschwindigkeitsverlust...

Klar, denn wenn man eine animation macht in der das Sprite Stufenweise Ein/Ausgeblendet wird, werden ja immer wieder die Pixel durchgegangen, also habe ich eine einfachere Möglichkeit gesucht... Und!!! Ich habe eine gefunden, sogar mal ohne Forum Wink

denn wenn das Sprite gemalt wird ja diese Funktion aufgerufen

Code:

m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     0,
                     &m_vScale,
                     &m_vRotationCenter,
                     m_TempRot,
                     &m_vPosition,
                     D3DCOLOR_XRGB(0xff,0xff,0xff));



Und da viel es mir wie Schuppen aus den Haaren Very Happy

Hab also einfach eine neue Member-Variable in die Sprite Klasse aufgenommen:

int m_Alpha

und diese wird mit SetAlpha() jetzt einfach gesetzt

und die Draw Funktion wurde so modifiziert

Code:

m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     0,
                     &m_vScale,
                     &m_vRotationCenter,
                     m_TempRot,
                     &m_vPosition,
                     D3DCOLOR_ARGB(m_Alpha,0xff,0xff,0xff));


Ich wollte Fragen ob dieser Weg Nachteile hat, und ob er besser oder schlechter als die andere SetAlpha Funktion ist. Auf jeden Fall erziehlt man einen großen Geschwindigkeitsvorteil.

Arrow Man könnte damit ja auch andere Farbmanipulationen machen, wäre doch mal ganz lustig Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 26.10.2003, 21:53    Titel: Antworten mit Zitat

Ups, ja, sehr gute Idee, einfahcer, besser und schneller wird es wohl kaum gehen, sollte man sich unbedingt merken. 3 Bienchen für dich Wink

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MATTT
Junior JLI'ler



Anmeldedatum: 18.06.2003
Beiträge: 59

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 17:13    Titel: Antworten mit Zitat

eine frage:

ich kenn mich sehr gut dx9 aus
aber kann man nicht auch
den letzten parameter der Draw()-Methode des Sprites benutzen
um die farben zu manilpulieren

schätze mal das geht auch mit alpha oder täusche ich mich da
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 17:16    Titel: Antworten mit Zitat

MATTT hat Folgendes geschrieben:
eine frage:

ich kenn mich sehr gut dx9 aus
aber kann man nicht auch
den letzten parameter der Draw()-Methode des Sprites benutzen
um die farben zu manilpulieren

schätze mal das geht auch mit alpha oder täusche ich mich da


guck mal 2 Posts nach oben Wink

nee stimmt, hast recht... aber da sind wir alle nicht drauf gekommen Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 17:17    Titel: Antworten mit Zitat

Hast du was verpasst? Rate mal was philipp_boeing in seinem letzten post geschreiben hat?

Zitat:

Klar, denn wenn man eine animation macht in der das Sprite Stufenweise Ein/Ausgeblendet wird, werden ja immer wieder die Pixel durchgegangen, also habe ich eine einfachere Möglichkeit gesucht... Und!!! Ich habe eine gefunden, sogar mal ohne Forum

denn wenn das Sprite gemalt wird ja diese Funktion aufgerufen


Code:

m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
0,
&m_vScale,
&m_vRotationCenter,
m_TempRot,
&m_vPosition,
D3DCOLOR_XRGB(0xff,0xff

_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 17:21    Titel: Antworten mit Zitat

@BLoD wir haben wohl fast gleichzeitig auf "Abschicken" geklickt Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
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