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

[OpenGL] TV noise - animacja

Ostatnio zmodyfikowano 2017-10-20 23:44
Autor Wiadomość
czaffik
» 2017-10-19 19:53:00
Wyświetlanie tekstury się tnie czy migocze? Możliwe że przez to że za szybko zmieniane sa tekstury i wychodzi taki efekt. Zmiana tekstury to dość kosztowna operacja, dlatego jednak lepiej napisać takie coś w shaderze, wykorzystac patent ze zmianami koordynatów tekstury, coś jak tutaj: http://www.geeks3d.com/20091009/shader-library-night-vision-post-processing-filter-glsl/.
Edit:
W zasadzie nie trzeba tego pisać w shaderze, możesz wprowadzić jakieś zmienne vec2 uv i je jakoś modyfikować (np sinus z uv * const)
C/C++
glBegin( GL_QUADS );
glColor3f( 1.0f, 1.0f, 1.0f );
glTexCoord2f( uv1.x, uv1.y ); glVertex3f( - 15.0, - 15.0, 0.0 );
glTexCoord2f( uv2.x, uv2.y ); glVertex3f( - 15.0, 15.0, 0.0 );
glTexCoord2f( uv3.x, uv3.y ); glVertex3f( 15.0, 15.0, 0.0 );
glTexCoord2f( uv4.x, uv4.y ); glVertex3f( 15.0, - 15.0, 0.0 );
glEnd();
P-165890
slowbro
Temat założony przez niniejszego użytkownika
» 2017-10-20 23:37:04
Dzięki za sugestie. Można faktycznie zrobić to jak piszesz, np:

C/C++
glTexCoord2f( 0.0 + rand() % 20, 0.0 + rand() % 20 ); glVertex3f( - 15.0, - 15.0, 0.0 );
glTexCoord2f( 0.0 + rand() % 20, 1.0 + rand() % 20 ); glVertex3f( - 15.0, 15.0, 0.0 );
glTexCoord2f( 1.0 + rand() % 20, 1.0 + rand() % 20 ); glVertex3f( 15.0, 15.0, 0.0 );
glTexCoord2f( 1.0 + rand() % 20, 0.0 + rand() % 20 ); glVertex3f( 15.0, - 15.0, 0.0 );

tylko trzeba losować liczby o dużych wartościach i wychodzi naprawdę piękne śnieżenie ekranu (przy małych losowanych liczbach pojawiają się skośne linie na ekranie i psują efekt śnieżenia). Niestety nie używam shaderów i rozwiązałem to inaczej. W każdej ramce pobieram wartość zwracanego wiersza granej muzyki, robię dzielenie z resztą i ustawiam wartość logiczną, a na jej podstawie ustawiam właściwą teksturę (każda tekstura ma noisowy charakter) quada w dalszej funkcji. Też działa dobrze.

C/C++
if(( intPosCurrVal % 4 == 0 ) ||( intPosCurrVal % 4 == 1 ) )
{
    changeNoiseTexture = true;
}
else
{
    changeNoiseTexture = false;
}

Można jeszcze za pomocą glTexSubImage2D, ale wyniki nie są dobre.
P-165922
Saran
» 2017-10-20 23:44:44
W zasadzie nie trzeba tego pisać w shaderze
P-165923
1 « 2 »
Poprzednia strona Strona 2 z 2