GLKit,Opengl ES 3.0,使用glReadPixels深入了解

时间:2018-09-18 16:10:45

标签: ios opengl-es glkit

我该如何在屏幕上获取距离点? 这是代码:

glReadPixels(p.x, p.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer);

所有绘制都很完美,但是我无法拉远点。

编辑:

我记录深度,也尝试颜色。颜色只读有以下参数:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    // preparing and drawing

    if (testDepthPoint.x != 0) {
        [self testDepth:testDepthPoint];
        testDepthPoint = CGPointZero;
    }
}

- (void)testDepth:(CGPoint)p {
    GLfloat depth = -99.0;
    glReadPixels(p.x, p.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
    NSLog(@"Depth %f", depth); // always log -99.0
}

使用GL_FLOAT时,无法读取rgb。 我也尝试在绘制后获取值:

{{1}}

不适用于我

2 个答案:

答案 0 :(得分:0)

除了您应该查看depth而不是pixelColor之外,您还需要了解时间,该时间应该在框架完成绘制之后,再提交下一个框架。

答案 1 :(得分:0)

OpenGL ES 3.0不支持从缓冲区读取GL_DEPTH_COMPONENT。此处更多信息:

https://stackoverflow.com/a/18805281/820795