[SxDL] symétrie / sprite

Tous les messages archivés concernant le développement. Il est impossible d'écrire de nouvelles discussions dans ce forum, mais on peut répondre à une ancienne discussion

symétrie / sprite

Messagepar Seby » 11 Avr 2005, 14:38

Bon, un premier post SxDL sur ce forum flambant neuf !

Est-ce qu'il existe un moyen d'avoir une symétrie (horizontale ou verticale) d'un sprite ?
Par exemple, si j'ai le sprite d'un mec qui marche vers la gauche, je peux le retourner pour faire le sprite d'un mec qui marche vers la droite ?
Seby
Hello World, I'm new !
 
Messages: 127
Inscription: 10 Avr 2005, 12:00
Localisation: Côte Bleue

Messagepar LaurentUSA » 11 Avr 2005, 16:22

On obtient cet effet ( flip et mirror image ) en utilisant des valeurs negatives pour Scale.
Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

Messagepar Seby » 11 Avr 2005, 17:27

Ah oui je vois, merci. Je crois avoir essayé une fois, mais ca n'avait pas marché... Peut-etre une ancienne version de SxDL ? Ou bien j'avais essayé des rotations de 180° sur x ou y...
Seby
Hello World, I'm new !
 
Messages: 127
Inscription: 10 Avr 2005, 12:00
Localisation: Côte Bleue

Messagepar Seby » 02 Mai 2005, 16:21

Bon je reviens sur cet ancien topic.
J'ai essayé le weekend dernier d'inverser un sprite avec une valeur négative sur le "scale", mais le sprite est devenu invisible.

Version de SxDL : 3.4 il me semble
Type de sprite : CBasicSprite
Seby
Hello World, I'm new !
 
Messages: 127
Inscription: 10 Avr 2005, 12:00
Localisation: Côte Bleue

Messagepar LaurentUSA » 07 Mai 2005, 18:57

Je viens de faire qq essais avec des particules dans le programme de test SpinningSprites. Ca marche pour moi...
Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

Messagepar LaurentUSA » 08 Mai 2005, 23:15

Effectivement les scales negatifs foutent la zone dans les algos de visibilité et de collision : Voici le patch, je fais un fabs ( ) des qu'on touche a un scale.

Code: Tout sélectionner
bool CEntity::IsVisible ( VisibilityAlgorithms Algorithm )
{
   // Bad, bad, bad hack !
   if ( IsHud )
      return true ;

   switch ( Algorithm )
   {
   case AlwaysVisible :
      return true ;
      break ;
   case AABB2D :
   {
      CCamera * cam = & Game->Camera ;
      // expand visibility when in pseudo 3d ( not the best way to do it, I admit )
      float Width = cam->Mode == CCamera::Iso3D ? cam->Width2D * 1.9f : cam->Width2D ;
      float x  = Position.x - cam->Eye.x ;
      float cx = fabs ( Scale.x ) / 2.0f ;
      if ( x - cx >   Width / 2.0f )
         return false ;
      if ( x + cx < - Width / 2.0f )
         return false ;
      // same here...
      float Height = cam->Mode == CCamera::Iso3D ? cam->Height2D * 2.1f : cam->Height2D ;
      float y  = Position.y - cam->Eye.y ;
      float cy = fabs ( Scale.y ) / 2.0f ;
      if ( y - cy >   Height / 2.0f )
         return false ;
      if ( y + cy < - Height / 2.0f )
         return false ;
   }
   break ;
   case Cone3D :
   {
      // quick and dirty DP check
      D3DXVECTOR3 ViewVector = Game->Camera.GetViewVector ( ) ;
      D3DXVECTOR3 ObjectVector = Position - Game->Camera.Eye ;
      D3DXVec3Normalize ( & ObjectVector , & ObjectVector ) ;
      FLOAT Dot = D3DXVec3Dot ( & ViewVector , & ObjectVector ) ;
      if ( Dot < cosf ( D3DX_PI / 5.0f ) )
         return false ;
   }
   break ;
   } ;
   // default to visible
   return true ;
}

bool CEntity::IsColliding ( CollisionAlgorithms Algorithm , CEntity * Entity , float AlgorithmData )
{
   switch ( Algorithm )
   {
   case Interact :
      return true ;
   case BB2D : // axis aligned bounding box ( AABB was taken )
      {   // dummy block to avoid C2360
         Vector3 EntityScale = Entity->Scale ;
         float x  = Position.x - Entity->Position.x ;
         float cx = ( fabs ( Scale.x ) - AlgorithmData ) / 2.0f ;
         if ( x - cx >   fabs ( EntityScale.x ) / 2.0f )
            return false ;
         if ( x + cx < - fabs ( EntityScale.x ) / 2.0f )
            return false ;
         float y  = Position.y - Entity->Position.y ;
         float cy = ( fabs ( Scale.y ) - - AlgorithmData ) / 2.0f ;
         if ( y - cy >   fabs ( EntityScale.y ) / 2.0f )
            return false ;
         if ( y + cy < - fabs ( EntityScale.y ) / 2.0f )
            return false ;
         return true ;
      } ;
      break ;
   case Distance2D : // intersection of bounding circles 
      { // same here
         float IntersectDistance = Distance ( Entity->Position ) ;
         IntersectDistance -= Radius2D ( ) ;
         IntersectDistance -= Entity->Radius2D ( ) ;
         IntersectDistance -= AlgorithmData ;
         if ( IntersectDistance > 0.0f )
            return false ;
         else
            return true ;
      } ;
      break ;
   case Distance3D : // intersection of bounding spheres 
      { // and again here
         float IntersectDistance = Distance ( Entity->Position ) ;
         IntersectDistance -= Radius3D ( ) ;
         IntersectDistance -= Entity->Radius3D ( ) ;
         IntersectDistance -= AlgorithmData ;
         if ( IntersectDistance > 0.0f )
            return false ;
         else
            return true ;
      } ;
      break ;
   } ;
   // default to no collision
   return false ;
}



En plus, flipper les sprites inverse les tris. Il faut donc disabler le culling. Voici le patch a faire : Une ligne de plus dans framemoverender.cpp

Code: Tout sélectionner
 

void SxDL::SetZSpritesRenderStates ( void )
{
   HRESULT hr  ;
   // culling mode to none in case we use flipped sprites
   hr = CachedDevice.SetCullMode ( D3DCULL_NONE );
   // From now, we do lighting with vertices
   hr = m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,  FALSE );
    hr = m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_FLAT );
   // Z buffering still enabled
   // now we do blending one:one
    hr = m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
    hr = m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_ONE );
    hr = m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
    // Enable alpha testing (skips pixels with less than a certain alpha.)
   D3DCAPS9 Caps ;
   m_pd3dDevice->GetDeviceCaps ( & Caps ) ;
    if( Caps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL )
    {
        hr = m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
        hr = m_pd3dDevice->SetRenderState( D3DRS_ALPHAREF,        0x08 );
        hr = m_pd3dDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );
    } ;
}

Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

Messagepar LaurentUSA » 09 Mai 2005, 09:31

Tout ca est pris en compte dans la version 3.0 desormais dispo sur SourceForge.net.
Avatar de l’utilisateur
LaurentUSA
Hello World, I'm new !
 
Messages: 186
Inscription: 10 Avr 2005, 12:00

How to convert ape to .wav treatment

Messagepar WhotOppope » 11 Oct 2017, 19:58

Ape to wav freeware company website: ape2wav windows couple ago free ape to wav converter online death The Free Audio Converter is a powerful YouTube to MP3 converter as well as YouTube downloader. Moreover, it can batch download online Audio s from YouTube, Facebook, Vevo, Veoh, Break, NicoAudio , etc. and then convert them to all popular audio formats: WAV, WMA, OGG, AAC, MP3, M4A, MP2, FLAC, AIFF, DTS, AU, etc. You can easily download &amp; convert YouTube to MP3, YouTube to M4A, etc. with this free audio converter.
WhotOppope
Hello World, I'm new !
 
Messages: 389
Inscription: 13 Sep 2017, 21:52


Retourner vers Archives développement

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron