Opengl es OpenGL ES 2.0中的纹理点?

Opengl es OpenGL ES 2.0中的纹理点?,opengl-es,sprite,glsl,point,Opengl Es,Sprite,Glsl,Point,我正在尝试在OpenGL ES 2.0中为粒子系统实现纹理点(例如点精灵)。我遇到的问题是,这些点都渲染为实心黑色正方形,而不是正确映射纹理 我已经验证了gl_PointCoord实际上返回了从0.0到1.0的x/y值,这将映射到整个纹理。不过,texture2D调用似乎总是返回黑色 我的顶点着色器: attribute vec4 aPosition; attribute float aAlpha; attribute float aSize; varying float vAlpha; uni

我正在尝试在OpenGL ES 2.0中为粒子系统实现纹理点(例如点精灵)。我遇到的问题是,这些点都渲染为实心黑色正方形,而不是正确映射纹理

我已经验证了gl_PointCoord实际上返回了从0.0到1.0的x/y值,这将映射到整个纹理。不过,texture2D调用似乎总是返回黑色

我的顶点着色器:

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);
}
和我的片段着色器:

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);
}
所讨论的纹理是16x16。我能够成功地将此纹理映射到其他几何体,但由于某些原因无法映射到点


我的平台是一个摩托罗拉Droid,运行安卓2.2。

你选择你的纹理作为活动,并像正常一样绑定它。但必须将纹理单元作为统一的对象传递给着色器程序。因此,您可以使用
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);
}

我也有一个类似的问题-我的精灵只是渲染成彩色方块,但没有纹理出现

我需要补充一点:

glEnable( GL_POINT_SPRITE );

默认情况下,不能在所有GPU上启用纹理处理。

忽略,我的纹理加载例程有问题。现在效果很好。你可以说问题是什么,以及你是如何解决的…只是纹理的加载吗?如何将其传递给着色器?干杯