2012-12-20 13 views
7

Ho bisogno di gl_FragColor per "dipingere" i valori in virgola mobile, che possono anche essere negativi (x < 0) e> 1,0. Poi voglio usare il colore allegato del FBO su questi valori dove renderlo e usarlo come una trama in un altro FBO. Ora ho letto su http://www.khronos.org/opengles/sdk/docs/man/ (sotto glTexImage2D) che tutti i valori sono bloccati su un intervallo di [0, 1] e inoltre non ho trovato un'istruzione glClampColor. C'è la possibilità di trovare una soluzione qui o qualcuno ha un'idea che potrebbe aiutarmi con il mio problema? :)Trame a virgola mobile in OpenGL ES 2.0 su iOS senza bloccarle su [0, 1]

risolto

È possibile ei valori non vengono serrati a [0, 1] affatto, quando si utilizza texture virgola mobile, ma ha solo lavoro utilizzando GL_HALF_FLOAT_OES come formato interno del tessuto. L'utilizzo di GL_FLOAT si traduce invece in un oggetto framebuffer incompleto, il che è molto triste, perché stavo creando una tabella di area riassunta (SAT) e qui ho riscontrato un grosso problema di precisione. Quindi, in generale, su iPad2 sono supportati solo la metà della precisione (2 byte, 1 bit di segno + 5 bit di esponente + 10 frazione).

Lavorare creazione del FBO texture di colore attachement

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL); 

Un'altra cosa da ricordare: strumenti saranno segnalare un "enum valido per l'argomento 'tipo'" messaggio, ma funziona comunque. Inoltre, il simulatore userà trame a piena precisione invece della precisione a metà specificata (penso che non ci sia alcun tipo di dati in C). Questo è il motivo per cui i problemi di precisione sul simulatore saranno probabilmente minori.

Ma la cosa più confusa è che "GL_OES_texture_float" è supportato quando si stampa glGetString (GL_EXTENSIONS). Tuttavia, come accennato prima, non funziona.

+1

Qual è il tipo di trama interna che si sta utilizzando? –

+0

Scusate ragazzi, spero che vi siate stati tutti benissimo. Grazie mille finora. Lo proverò questo fine settimana – RayDeeA

+0

Il formato interno è GL_RGB. Ecco perché ero preoccupato perché il dottore dice che solo GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB e GL_RGBA sono ammessi e che tutti loro sono bloccati a [0,1] See: http://www.khronos.org/opengles/sdk/docs/man/under glTexImage2D – RayDeeA

risposta

4

Non credo che questo sia vero per le trame mobili. Controllare la documentazione di estensione:

http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt

Si cita:.

"I gruppi selezionati sono trattati come descritto nella sezione 3.6.2, fermandosi dopo espansione finale RGBA Se il formato interno della trama è punto fisso, i componenti sono bloccati su [0,1], altrimenti i valori non sono modificati. "

+0

Ho provato a usare GL_OES_texture_float come tipo di trame, ma l'unico risultato era un log che diceva che non era in grado di creare un oggetto framebuffer completo noto come 8cd6. :( – RayDeeA

+0

È possibile utilizzare le trame mobili su iOS, ma dovrai aspettarti che qualcuno ti aiuti. – Tark

+0

Avevi ragione.È possibile e i valori non sono affatto bloccati, ma funziona solo usando GL_HALF_FLOAT_OES come formato interno. L'utilizzo di GL_FLOAT invece si traduce in un oggetto framebuffer incompleto. Pertanto, su iPad2 sono consentiti solo numeri di virgola mobile a metà precisione. Un'altra cosa da ricordare: Gli strumenti segnalano un messaggio "Tipo enum non valido per argomento", ma funziona comunque. Ah e un'altra cosa weired è anche quella glreadpixels, funziona solo con GL_FLOAT in quanto il formato GL_HALF_FLOAT_OES risulta in diversi numeri in virgola mobile. Grazie mille! – RayDeeA