IOS GLKit:图灵GLKViewDrawableMultisample4X停止对象选择

时间:2012-06-25 10:24:14

标签: ios opengl-es glkit picking

我正在使用像素颜色选择来确定我点击了哪个OpenGL对象并且它的工作非常出色

一旦我在视图中打开GLKViewDrawableMultisample4X,拣货就会停止工作?

我在触摸屏幕时尝试打开和关闭此功能,但只能使用一次。

选择代码:

  GLKView *glkView = (GLKView*)[self view];
  UIImage *snapshot = [glkView snapshot];
  GLKVector4 colour = [snapshot pickPixelAtX:xPos Y:yPos];

@implementation UIImage (NDBExtensions)

- (GLKVector4)pickPixelAtX:(NSUInteger)x Y:(NSUInteger)y {

    CGImageRef cgImage = [self CGImage];
    size_t width = CGImageGetWidth(cgImage);
    size_t height = CGImageGetHeight(cgImage);

    if ((x < width) && (y < height))
    {
        CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
        CFDataRef bitmapData = CGDataProviderCopyData(provider);
        const UInt8* data = CFDataGetBytePtr(bitmapData);
        size_t offset = ((width * y) + x) * 4;

        UInt8 b = data[offset+0];
        UInt8 g = data[offset+1];
        UInt8 r = data[offset+2];
        UInt8 a = data[offset+3];

        CFRelease(bitmapData);

        return GLKVector4Make(r, g, b, a );

    }
    return GLKVector4Make(0,0,0,0);
}

1 个答案:

答案 0 :(得分:0)

我设法使用此

中的代码解决了这个问题

OpenGL ES 2.0 Object Picking on iOS

非常好的答案,基本上GLKViewDrawableMultisample4X不能用于拾取,所以你需要制作另一个渲染缓冲区