Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [SDL + Opengl] Scia sprite in movimento
Forum - C/C++ - [SDL + Opengl] Scia sprite in movimento

Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 17:32
Domenica, 13/01/2013
Ciao, ho un altro problema con le Sdl + opengl, nonostante il double buffering attivo gli sprite lasciano una "scia" quando si muovono e l'effetto è molto fastidioso, sapete quale potrebbe essere la causa?

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 19:53
Domenica, 13/01/2013
Ciao.

Puoi postare il sorgente?

Ciao!


... sei un proxy che perde i pacchetti ...
PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 7:22
Lunedì, 14/01/2013
Si, scusa me ne ero dimenticato

Funzione chiamata all'inizio
Codice sorgente - presumibilmente C/C++

  1. SDL_Init(SDL_INIT_EVERYTHING);
  2.     atexit(SDL_Quit);
  3.  
  4.     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  5.     SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
  6.  
  7.     screen = SDL_SetVideoMode(800, 600, 16, SDL_OPENGL|SDL_FULLSCREEN);
  8.     if(!screen)
  9.         return false;
  10.  
  11.  
  12.     glClearColor(0, 0, 0, 0);
  13.     glEnable(GL_TEXTURE_2D);
  14.     glViewport(0, 0, 800, 600);
  15.     glMatrixMode(GL_PROJECTION);
  16.     glLoadIdentity();
  17.     glOrtho(0, 2560, 1440, 0, -1, 1);
  18.     glMatrixMode(GL_MODELVIEW);
  19.     glLoadIdentity();
  20.     glEnable(GL_BLEND);
  21.     glDisable(GL_DEPTH_TEST);
  22.     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);



funzione di disegno generale
Codice sorgente - presumibilmente Plain Text

  1. if(SDL_GetTicks()-iOldTime >= 15)
  2.     {
  3.         glClearColor(0.3, 0.3, 0.3, 1);
  4.         glClear(GL_COLOR_BUFFER_BIT);
  5.  
  6.         Events();
  7.  
  8.         level.Draw();
  9.  
  10.         SDL_GL_SwapBuffers();
  11.  
  12.         iOldTime = SDL_GetTicks();
  13.     }



disegno di un singolo sprite
Codice sorgente - presumibilmente Plain Text

  1. glBindTexture(GL_TEXTURE_2D, texture[currentFrame]);
  2.  
  3.         glBegin(GL_QUADS );
  4.         glTexCoord2i(0, 0);
  5.         glVertex3f(boundingBox.p1.x, boundingBox.p1.y, 0);
  6.         glTexCoord2i(1, 0);
  7.         glVertex3f(boundingBox.p2.x, boundingBox.p1.y, 0);
  8.         glTexCoord2i(1, 1);
  9.         glVertex3f(boundingBox.p2.x, boundingBox.p2.y, 0);
  10.         glTexCoord2i(0, 1);
  11.         glVertex3f(boundingBox.p1.x, boundingBox.p2.y, 0);
  12.         glEnd();



Non ho postato tutto il sorgente perchè sarebbe stato troppo lungo, comunque la variabile level contiene tutti gli sprite da disegnare quindi la funzione level.Draw() richiama tante volte quella per diseganre ogni sprite.

PM Quote