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: 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. |
|
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.. |
|
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? |
|
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. fFlashLen = fFlashRem = 1.5f;
fFlashRem = std::max( 0.f, fFlashRem - dt ); alpha = f( fFlashRem / fFlashLen ); |
|
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)? |
|
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. |
|
« 1 » |