Autore Topic: textture opengl e filtri  (Letto 1136 volte)

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
textture opengl e filtri
« il: 08 Marzo 2014, 21:51:57 CET »
0
Ciao a tutti,
sto utilizzando la libreria GPUImage e volevo crearmi un filtro mio e cercare di modificarne uno già esistente.
ma iniziamo dal mio spero mi perdoniate sono completamente a digiuno di opengl e non riesco anche cercando online a capire proprio come funziona il tutto!!! :( :( :( :(

allora ho la mia immagine e volevo sovrapporre su questa una serie di cerchietti!!!
ho trovato in rete questo codice che crea cerchietti e funziona solamente che non riesco a capire come farli sovrapporre alla mia immagine texture!!!

Codice (Java): [Seleziona]
 public static final String VIGNETTING_FRAGMENT_SHADER = "" +
                "void main(void)\n" +
                "{\n" +
                "       vec2 pos = mod(gl_FragCoord.xy, vec2(50.0)) - vec2(25.0);\n" +
                "       float dist_squared = dot(pos, pos);\n" +
                "\n" +
                "       gl_FragColor = (dist_squared < 400.0) \n" +
                "                       ? vec4(.90, .90, .90, 1.0)\n" +
                "                                       : vec4(.20, .20, .40, 1.0);\n" +
                "}";

grazie a tutti!!!!
Maverik @ Google Play Store

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:textture opengl e filtri
« Risposta #1 il: 09 Marzo 2014, 10:15:55 CET »
0
Filtro? Quel codice è un fragment shader, è completamente procedurale non dipende da texture, assegna il colore e alpha channel ai pixel processati.

La gestione degli shader con le OpenGL-ES è molto complessa, oltre a conoscere molto bene API, bisogna conoscere tecniche matematiche per generare tutti gli effetti grafici desiderati.

Consiglio prima di utilizzare codice a caso preso dal web di studiare molto bene API, capire perfettamente come funzionano gli shader, capire come utilizzare le texture, come combinarle tra loro (multi-texture) solo dopo di provare a scrivere dei propri shader.

Inviato dal mio Nexus 5 utilizzando Tapatalk

« Ultima modifica: 10 Marzo 2014, 09:22:26 CET da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:textture opengl e filtri
« Risposta #2 il: 09 Marzo 2014, 23:05:04 CET »
0
Cavoloo avevo capito che era complicato ma nn pensavo fino a sto punto!!!!

Esiste un modo per tastare questi shader???

cmq grazie  inizio a vedere le api e vediamo che capisco
Maverik @ Google Play Store

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:textture opengl e filtri
« Risposta #3 il: 10 Marzo 2014, 10:28:00 CET »
0
Tieni presente che le OpenGL-ES sono un sottoinsieme delle OpenGL, quindi eventuali programmi per PC possono utilizzare funzioni non presenti nelle GPU utilizzate nei dispositivi mobili. Il manuale di riferimento spiega esattamente la sintassi e le funzioni degli shader presenti nelle OpenGL-ES:

OpenGL ES - The Standard for Embedded Accelerated 3D Graphics

Credo che i vari produttori di GPU rilascino dei tool di supporto, di solito girano su sistemi operativi che non uso quindi preferisco compilarmi le Mesa3D con il supporto per le OpenGL-ES per eseguire i test sul PC sfruttando la scheda video OpenGL:

OpenGL ES
adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:textture opengl e filtri
« Risposta #4 il: 10 Marzo 2014, 11:21:40 CET »
0
Credo che i vari produttori di GPU rilascino dei tool di supporto, di solito girano su sistemi operativi che non uso quindi preferisco compilarmi le Mesa3D con il supporto per le OpenGL-ES per eseguire i test sul PC sfruttando la scheda video OpenGL:
Immagino che quindi tu non possa far partire in Linux un emulatore accelerato???  :-o

Non puoi provare direttamente sul device?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:textture opengl e filtri
« Risposta #5 il: 10 Marzo 2014, 11:51:06 CET »
0
Sotto Linux posso tranquillamente far partire l'emulatore accelerato con le OpenGL-ES, ma qui non si parla di emulatori ma scrittura di fragment shader.

Se uno è sul PC e vuole testare direttamente il codice degli shader è possibile farlo senza passare per un emulatore o un device esterno. Esistono dei programmi per questo ma io uso direttamente le librerie, in questo modo metto alla prova anche il resto del codice in contemporanea.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:textture opengl e filtri
« Risposta #6 il: 10 Marzo 2014, 11:54:29 CET »
0
ma non sono riuscito a capire si posso testare questi codici con windows??

mi sta sfuggendo qualcosa credo di molto importante!!! :(
Maverik @ Google Play Store

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:textture opengl e filtri
« Risposta #7 il: 10 Marzo 2014, 12:06:50 CET »
0
Soluzione interessante.. peccato manchi la parte di profiling che i tool dei produttori mettono a disposizione (ma lì serve il device attaccato).  :-(

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:textture opengl e filtri
« Risposta #8 il: 10 Marzo 2014, 12:11:58 CET »
0
Windows? Forse intendi MS-Windows, mi sfugge cosa sia :-)

Ripeto, ti consiglio di leggere la documentazione, senza delle ottime basi sull'argomento con gli shader non vai avanti.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:textture opengl e filtri
« Risposta #9 il: 10 Marzo 2014, 12:30:44 CET »
0
Cavoloo avevo capito che era complicato ma nn pensavo fino a sto punto!!!!
Non è così complicato. Iceweasel ha tecnicamente ragione, quelli sono fragment shaders. D'altra parte la libreria li chiama filtri, quindi da lì nasce la confusione. Sono dei fragment shaders scritti per applicare dei filtri a delle immagini.

E' inutile guardare le api se non hai presente di cosa stiamo parlando, cerco di riassumertelo in modo più stringato possibile.

Tu hai una immagine e a questa immagine devi applicare un effetto/filtro. Hai 3 opzioni.

1- carichi l'immagine in java, ti scrivi il filtro tal dei tali e la risalvi.
2- carichi l'immagine in C/C++, ti scrivi il filtro tal dei tali e la risalvi.
3- altro.

L'opzione 1 è la più semplice ma è lenta da morire e ha dei limiti sulla dimensione delle immagini, dovuti all'heap space java. Da scartare.
L'opzione 2 aggiunge complessità per il fatto di dover usare JNI, è molto più veloce della prima ma in generale è abbastanza lenta. Meglio della 1 ma non è la soluzione ottimale.

Per fortuna esiste una opzione 3. L'idea è quella di utilizzare le capacità grafiche del device per applicare i filtri. Detto in due parole OpenGL ES ti permette di disegnare dei poligoni sullo schermo (o fuori dallo schermo) e "incollarci" sopra una immagine. Il modo in cui disegni questi poligoni è specificato da due "mini programmi" (gli shader): uno viene eseguito per ogni vertice del poligono (vertex shader) e uno per ogni punto (pixel/fragment shader). Quello che fa quella libreria è disegnare un poligono grande quanto lo schermo (o se è offline creare una finestra invisibile grande quanto l'immagine) e poi modificare l'immagine utilizzando un fragment shader apposito. A quel punto puoi rileggere il buffer/finestra e salvarlo e hai la tua immagine filtrata. Per esempio se nel tuo fragment shader leggessi il colore e lo dividessi per due avresti una immagine più scura.

Ovviamente le potenzialità dei fragment shader non sono paragonabili a quelle di un linguaggio di programmazione vero e proprio ma si usano per gli indubbi vantaggi che hanno. In pratica per aumentare la velocità i pixel vengono disegnati "in parallelo" e lo stesso fragment shader viene eseguito su tutti i pixel. Per questioni tecniche che non sto a spiegare nel dettaglio usare if o leggere l'immagine in modo non contiguo rallenta il disegno. Ma parliamo di una velocità che è comunque molto superiore rispetto a quanto puoi ottenere facendo un filtro in C/C++.

Per fare i test puoi procedere benissimo con un device o con un emulatore accelerato su Windows. La soluzione di iceweasel è notevole ma non è necessario ricompilarsi le mesa per provare tutto nativamente in ambiente Linux/Windows. Almeno all'inizio puoi benissimo ricompilare un esempio di quella libreria, provarla su un device e metterti a cambiare i fragment shader (e loggare se ci sono errori).

 :-)


Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:textture opengl e filtri
« Risposta #10 il: 10 Marzo 2014, 14:14:10 CET »
0
okk grazie mille per la spiegazione!!

ora cerco di capire come poter implementare quello che voglio fare!!!

grazie mille! :)
Maverik @ Google Play Store