2010-08-16 202 views
8

我正在嘗試在OpenGL ES 2.0中爲粒子系統實現紋理點(例如點精靈)。我遇到的問題是所有的點都呈現爲純黑色方塊,而不是紋理正確映射。OpenGL ES 2.0中的紋理點?

我已經驗證gl_PointCoord實際上是返回從0.0到1.0的x/y值,它將映射整個紋理。紋理2D調用似乎總是返回黑色。

我的頂點着色器:

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; 
} 

我的片段着色器:

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); 
} 

有問題的質地是16×16。我能夠成功地將此紋理映射到其他幾何體,但出於某種原因不能指向。

我的平臺是運行Android 2.2的摩托羅拉Droid。

+0

否認,我和我的紋理加載程序的問題。現在效果很好。 – Ivan 2010-08-17 02:16:55

+1

你可以說出了什麼問題,以及你如何解決它...... – 2011-03-08 17:05:38

+0

它只是紋理的加載?你如何將它傳遞給着色器?乾杯 – DiogoNeves 2011-05-22 22:28:01

回答

14

您選擇您的紋理作爲活動並綁定它 - 就像通常一樣。但是您必須將您的紋理單元統一傳遞給着色器程序。因此,您可以使用gl_PointCoord作爲片段着色器中的紋理座標。

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); 

和你的片段着色器應該是這樣的:

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