小编Iva*_*van的帖子

OpenGL ES 2.0中的纹理点?

我正在尝试在OpenGL ES 2.0中为粒子系统实现纹理点(例如点精灵).我遇到的问题是所有点都呈现为纯黑色方块,而不是正确映射纹理.

我已经验证了gl_PointCoord实际上将x/y值从0.0返回到1.0,这将映射整个纹理.尽管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;
}
Run Code Online (Sandbox Code Playgroud)

我的片段着色器:

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);
}
Run Code Online (Sandbox Code Playgroud)

有问题的纹理是16x16.我能够成功地将此纹理映射到其他几何体,但由于某种原因不能指向.

我的平台是摩托罗拉Droid,运行Android 2.2.

opengl-es point glsl sprite

9
推荐指数
1
解决办法
1万
查看次数

OpenGL Point Sprites可以在Android中运行吗?

我正在开发Droid版本2.1-update1.我支持的GL扩展包括GL_OES_point_sprite和GL_OES_point_size_array.

我无法获得点精灵渲染.下面的代码在glTexEnvi调用时从GLWrapperBase抛出UnsupportedOperationException.如果我禁用纹理并注释掉glTexEnvi all,它会在glPointSizePointerOES()处进一步抛出相同的异常.

Android中是否正确支持点精灵?有没有人让他们工作?或者下面的代码是否存在问题?

// Note that gl is cast to GL11
gl.glEnable(GL11.GL_TEXTURE_2D);
gl.glEnable(GL11.GL_BLEND);
gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
gl.glDepthMask(false);
gl.glEnable(GL11.GL_POINT_SPRITE_OES);
gl.glTexEnvi( GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE );  
gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL11.GL_SHORT, 0, .vertBuffer);
gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);
gl.glPointSizePointerOES(GL11.GL_FLOAT, 0, pointSizeBuffer);
Run Code Online (Sandbox Code Playgroud)

谢谢

android opengl-es point sprite

4
推荐指数
1
解决办法
4976
查看次数

标签 统计

opengl-es ×2

point ×2

sprite ×2

android ×1

glsl ×1