1

刚开始使用 OpenFrameworks,我正在尝试做一些简单的事情:测试屏幕上特定点的像素颜色。

我发现在 openFrameworks 中没有很好的方法可以做到这一点,但我可以使用 openGL 和 glReadPixels。但是,我遇到了很多麻烦。

基于http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml我开​​始尝试这样做:

glReadPixels(x,y, 1,1, GL_RGB, GL_INT, &an_int);

我想,当我检查单个像素的值(宽度和高度为 1)并给它一个 GL_INT 作为类型 GL_RGB 作为格式时,单个像素应该占用一个 int(4 个字节)因此我传递了一个指针一个 int 作为数据参数。

然而,我注意到的第一件事是 glReadPixels 似乎破坏了我函数中的一些其他局部变量,所以我改为创建一个 10 个整数的数组,现在传递它。这已经停止了任何奇怪的副作用,但我仍然不知道如何解释它返回的内容。

那么......我应该传递的格式和类型参数的正确组合是什么,以安全地获得可以轻松解压缩为其 RGB 值的东西?(请注意,我是通过 openFrameworks 执行此操作的,因此我自己并没有明确设置 openGL。我想我只是获得了 openFramework / openGL 默认值。我知道我正在做的唯一配置不是设置 alpha -混合,我相信这意味着像素由 3 个字节(R、G、B 但没有 alpha)表示。我假设 GL_RGB 是与此相对应的格式。

4

1 回答 1

3

如果这样做,则需要三个 int:一个用于 R,一个用于 G,一个用于 B。如果认为您应该使用:

unsigned char RGB[3];
glReadPixels(x,y, 1,1, GL_RGB, GL_UNSIGNED_BYTE, rgb);
于 2010-11-17T14:37:37.437 回答