开发者

Testing point in the alpha channel

Is there a way to detect if the alpha of a pixel after drawing is not 0 when using OpenGLES on the iphone?

I would like to test multiple points to see id they are inside the area of a random polygon drawn by the user. If you开发者_如何转开发 know Flash, something equivalent to BitmapData::getPixel32 is what I'm looking for.


The framebuffer is kept by the GPU and is not immediately CPU accessible. I think the thing you'd most likely want from full OpenGL is the occlusion query; you can request geometry be drawn and be told how many pixels were actually plotted. Sadly that isn't available on the iPhone.

I think what you probably want is glReadPixels, which can be used to read a single pixel if you prefer, e.g. (written here, as I type, not tested)

GLubyte pixelValue[4];
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixelValue);

NSLog(@"alpha was %d", pixelValue[3]);

Using glReadPixels causes a pipeline flush, so is generally a bad idea from a GL performance point of view, but it'll do what you want. Unlike iOS, OpenGL uses graph paper order for pixel coordinates, so (0, 0) is the lower left corner.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜