【问题标题】:OpenglES 2.0 GL_POINTS disappearOpenGLES 2.0 GL_POINTS 消失
【发布时间】:2013-02-26 16:28:51
【问题描述】:

我使用 gl_points 作为精灵,当点到达屏幕边界时它们会消失,问题是我的点大于 1 像素,所以当一半的点喙通过屏幕边界时它们会消失,我假设有某种剔除打开以删除屏幕外的点,问题是如何将其关闭。

【问题讨论】:

  • 在这种情况下增加视口会有所帮助:)

标签: opengl-es-2.0


【解决方案1】:
    GLES20Renderer.programLight = GLES20.glCreateProgram();
    int vertexShaderLight       = GLES20Renderer.loadShader(GLES20.GL_VERTEX_SHADER, GLES20Renderer.vertexShaderCodeLight);
    int fragmentShaderLight     = GLES20Renderer.loadShader(GLES20.GL_FRAGMENT_SHADER, GLES20Renderer.fragmentShaderCodeLight);
    GLES20.glAttachShader(GLES20Renderer.programLight, vertexShaderLight);
    GLES20.glAttachShader(GLES20Renderer.programLight, fragmentShaderLight);
    GLES20.glLinkProgram(GLES20Renderer.programLight);
    uPLocationLight             = GLES20.glGetUniformLocation(GLES20Renderer.programLight, "uP");
    uVPositionLocationLight     = GLES20.glGetUniformLocation(GLES20Renderer.programLight, "uVPosition");

    GLES20.glUseProgram(GLES20Renderer.programLight);
    GLES20.glUniform4f(uVPositionLocationLight, LightPosInEyeSpace[0], LightPosInEyeSpace[1], LightPosInEyeSpace[2], LightPosInEyeSpace[3]);
    GLES20.glUniformMatrix4fv(uPLocationLight, 1, false, ProjectionMatrix, 0);
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);


private static final String vertexShaderCodeLight = 
        "uniform vec4 uVPosition;                   \n"
    +   "uniform mat4 uP;                           \n"
    +   "void main(){                               \n"
    +   " gl_PointSize = 15.0;                      \n"
    +   " gl_Position = uP * uVPosition;            \n"
    +   "}                                          \n";
private static final String fragmentShaderCodeLight = 
        "#ifdef GL_FRAGMENT_PRECISION_HIGH          \n"
    +   "precision highp float;                     \n"
    +   "#else                                      \n"
    +   "precision mediump float;                   \n"
    +   "#endif                                     \n"
    +   "void main(){                               \n"
    +   " gl_FragColor = vec4(1.0,1.0,1.0,1.0);     \n"
    +   "}                                          \n";

【讨论】:

    【解决方案2】:

    GL_POINTS 在中心被剪裁。这只是 GL_POINTS 的限制。如果你不能忍受这个,只需使用常规四边形(假设性能可以处理它)

    【讨论】:

    • 我知道,这就是为什么我增加了视口大小,所以它在 x 和 y 中增加了两个点大小,并且点现在渲染得很好
    【解决方案3】:

    增加视口大小会有所帮助,或者您可以将其渲染为纹理和缩放 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多