【问题标题】:OpenGL ES 3.0 occlusion query always result falseOpenGL ES 3.0 遮挡查询总是结果为假
【发布时间】:2014-11-11 05:41:43
【问题描述】:

我正在尝试在 android OpenGLES 3.0 中对位于不同 Z 的两个三角形进行遮挡查询。

这是我的使用方法:

In onSurfaceCreated():
     GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
     GLES30.glEnable(GLES30.GL_DEPTH_TEST);     // enabling Deoth test

In onDrawFrame(): 
     GLES30.glClear(GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
     Matrix.setIdentityM(mModelMatrix, 0);
     Matrix.setIdentityM(mModelMatrix, 0);
     Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, 1.0f); // translating at some differnt z = 1.0
     drawTriangle(mTriangle1Vertices);                      // method for drawing traingle1

     Matrix.setIdentityM(mModelMatrix, 0);
     Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, 0.0f); // other triangle at Z = 0.0

// Occlusion Query for Triangle2
    IntBuffer testBox = IntBuffer.allocate(1);
    IntBuffer hasBeenTested = IntBuffer.allocate(1);
    IntBuffer theParams = IntBuffer.allocate(1);

    GLES30.glGenQueries(1, testBox);
    int retid = testBox.get(0);
    GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, retid);

    drawTriangle(mTriangle2Vertices);         // drawing traingle 2 ie at Z = 0.0

    GLES30.glEndQuery(retid);
    int retQuerry = testBox.get(0);
    GLES30.glGetQueryObjectuiv(retid, GLES30.GL_QUERY_RESULT, theParams);

    int isHidden = theParams.get(0);              // THIS IS ALWAYS ZERO even if  I REVERSE the Z- translation of the triangles
    Log.i("occ", " isHiddedn " +  isHidden);        

    GLES30.glDeleteQueries(1, testBox);

drawTriangle() 方法中,我只是将颜色、顶点和MVP uinform 传递给顶点着色器。

在我的设备屏幕上,我可以看到 TRAINGLE 2 完全被 TRIANGLE 1 遮挡。此外,如果我反转 Z 平移,其他三角形也完全被遮挡。但是测试结果(isHidden)仍然保持不变吗? 我哪里错了?如何进行正确的遮挡测试?

【问题讨论】:

    标签: android opengl-es opengl-es-3.0


    【解决方案1】:

    glEndQuery() 的参数是目标,而不是查询 ID。这与对应的glBeginQuery() 的第一个参数相同。在您的情况下,它将是:

    GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, retid);
    drawTriangle(mTriangle2Vertices);
    GLES30.glEndQuery(GLES30.GL_ANY_SAMPLES_PASSED);
    

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多