Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL] Biały błysk ekranu

Ostatnio zmodyfikowano 2017-09-05 14:28
Autor Wiadomość
slowbro
Temat założony przez niniejszego użytkownika
[OpenGL] Biały błysk ekranu
» 2017-09-03 01:45:14
W produkcjach demoscenowych (intra, dema) można zauważyć biały błysk ekranu w rytm uderzeń perkusji czy innych akcentów muzycznych. Jest to widoczne np. w tej produkcji https://www.youtube.com/watch?v=2SbGffUzHSs. Napisałem funkcję, która wyświetla właśnie taki błysk:
C/C++
void fade()
{
    glLoadIdentity();
    glTranslatef( 0.0f, 0.0f, - 5.0f );
   
    glPolygonMode( GL_FRONT, GL_FILL );
    glPolygonMode( GL_BACK, GL_FILL );
   
    glDisable( GL_TEXTURE_2D );
    glEnable( GL_BLEND );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE );
   
    if( alpha <= 1 )
    {
        glColor4f( 1.0, 1.0, 1.0, alpha );
       
        glBegin( GL_QUADS );
        glVertex3f( - 1.0f, - 1.0f, 1.0f );
        glVertex3f( 1.0f, - 1.0f, 1.0f );
        glVertex3f( 1.0f, 1.0f, 1.0f );
        glVertex3f( - 1.0f, 1.0f, 1.0f );
        glEnd();
       
        alpha += 0.0025;
    }
    else
    {
        glColor4f( 1.0, 1.0, 1.0, alpha_inv );
       
        glBegin( GL_QUADS );
        glVertex3f( - 1.0f, - 1.0f, 1.0f );
        glVertex3f( 1.0f, - 1.0f, 1.0f );
        glVertex3f( 1.0f, 1.0f, 1.0f );
        glVertex3f( - 1.0f, 1.0f, 1.0f );
        glEnd();
       
        alpha_inv -= 0.0025;
    }
   
    glDisable( GL_BLEND );
    glEnable( GL_TEXTURE_2D );
   
    return;
}
Poszukuje rozwiązania (np. jakiś parametr), które pozwoli na kontrolowanie czasu trwania takiego błysku tak, aby np. pierwszy trwał 1,5 sekundy, a drugi był krótszy i trwał np. 0,25 sekundy.
P-164552
Saran
» 2017-09-03 10:15:02
Szybka myśl - obliczaj o ile zmienić wartość alpha na klatkę, dzieląc maksymalną wartość przez ilość klatek w ciągu czasu błysku..
P-164555
slowbro
Temat założony przez niniejszego użytkownika
» 2017-09-03 12:52:47
Jak można obliczyć ilość klatek w ciągu czasu błysku?
P-164560
pekfos
» 2017-09-03 13:47:04
obliczaj o ile zmienić wartość alpha na klatkę, dzieląc maksymalną wartość przez ilość klatek w ciągu czasu błysku..
A po co? Wystarczy to zrobić na bazie czasu rzeczywistego.
C/C++
fFlashLen = fFlashRem = 1.5f; // w sekundach

// w aktualizacji
fFlashRem = std::max( 0.f, fFlashRem - dt );
alpha = f( fFlashRem / fFlashLen );
P-164561
slowbro
Temat założony przez niniejszego użytkownika
» 2017-09-04 23:21:00
Co to za "f" w wierszu alpha = f( fFlashRem / fFlashLen)?
P-164603
pekfos
» 2017-09-05 14:28:44
Funkcja. Raczej nie chcesz mieć liniowej zmiany alfy, prędzej kwadratową. Jaka by nie była, interpolację dobierz sobie sam.
P-164615
« 1 »
  Strona 1 z 1