2010-08-16 16 views
8

Sto cercando di implementare punti testurizzati (ad esempio sprite punti) in OpenGL ES 2.0 per un sistema di particelle. Il problema che sto riscontrando è che tutti i punti vengono rappresentati come quadratini neri pieni, piuttosto che avere una texture correttamente mappata.Punti strutturati in OpenGL ES 2.0?

Ho verificato che gl_PointCoord sta infatti restituendo valori x/y da 0.0 a 1.0, che verrebbero mappati sull'intera trama. La chiamata a texture2D sembra sempre tornare nera.

mio vertex shader:

attribute vec4 aPosition; 
attribute float aAlpha; 
attribute float aSize; 
varying float vAlpha; 
uniform mat4 uMVPMatrix; 

void main() { 
    gl_PointSize = aSize; 
    vAlpha = aAlpha; 
    gl_Position = uMVPMatrix * aPosition; 
} 

E il mio frammento di shader:

precision mediump float; 
uniform sampler2D tex; 
varying float vAlpha; 

void main() { 
    vec4 texColor = texture2D(tex, gl_PointCoord); 
    gl_FragColor = vec4(texColor.rgb, texColor.a * vAlpha); 
} 

La texture in questione è 16x16. Sono in grado di mappare con successo questa texture ad altre geometrie, ma per qualche motivo non ai punti.

La mia piattaforma è un Motorola Droid, con sistema operativo Android 2.2.

+0

Ignorare, ho avuto un problema con la mia routine di tessitura di carico. Funziona alla grande ora. – Ivan

+1

Avresti potuto dire quale fosse il problema e come lo hai risolto ... –

+0

Era solo il caricamento della trama? Come lo passi allo shader? Saluti – DiogoNeves

risposta

14

Si seleziona la trama come attiva e la si lega come normalmente. Ma devi passare l'unità di texture come uniforme al programma shader. Quindi puoi usare gl_PointCoord come coordinate di trama nello shader di frammenti.

glUniform1i(MY_TEXTURE_UNIFORM_LOCATION, 0); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, yourTextureId); 
glEnable(GL_TEXTURE_2D); 
glDrawArrays(GL_POINTS, 0, pointCount); 
glDisable(GL_TEXTURE_2D); 

E il tuo Shader frammento dovrebbe essere simile:

uniform sampler2D texture; 
void main () 
{ 
    gl_FragColor = texture2D(texture, gl_PointCoord); 
}