Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 获取像素颜色不准确_Opengl Es_Colors_Picking_Openglcontext - Fatal编程技术网

Opengl es 获取像素颜色不准确

Opengl es 获取像素颜色不准确,opengl-es,colors,picking,openglcontext,Opengl Es,Colors,Picking,Openglcontext,我目前正在我的应用程序中使用颜色选择。 这在PC上工作,但是我很难让它在各种设备上工作 这可能是由于上下文设置不同,具体取决于设备。例如,据我所知,PC的颜色设置为888,而设备可能默认为565 我想知道OpenGL中是否有一种方法可以获取当前的像素/颜色格式,以便我可以正确地检索颜色数据 这是我正在使用的功能,在PC上运行良好: inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y) { GLint v

我目前正在我的应用程序中使用颜色选择。 这在PC上工作,但是我很难让它在各种设备上工作

这可能是由于上下文设置不同,具体取决于设备。例如,据我所知,PC的颜色设置为888,而设备可能默认为565

我想知道OpenGL中是否有一种方法可以获取当前的像素/颜色格式,以便我可以正确地检索颜色数据

这是我正在使用的功能,在PC上运行良好:

inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y)
{
    GLint viewport[4];
    GLubyte pixel[3];

    glGetIntegerv(GL_VIEWPORT,viewport);

    //Read colour of pixel at a specific point in the framebuffer

    glReadPixels(x,viewport[3]-y,1,1,
        GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel);

    out[0] = pixel[0];
    out[1] = pixel[1];
    out[2] = pixel[2];
}

有什么想法吗?

有,但有点复杂

查询当前帧缓冲区的位深度在ES 2.0中相当容易(注意:这在桌面GL中也是合法的,但在GL 3.1 core中删除了此功能。它仍然可以从兼容配置文件中访问)。必须获得每个颜色组件的位深度:

闪烁深度; glGetIntegerv(GL_x_深度和位深度)

其中x是红色、
绿色
蓝色
阿尔法
中的一种


有了位深度后,可以测试它是否为565,并使用适当的像素传输参数和颜色值。

是的,但有点复杂

查询当前帧缓冲区的位深度在ES 2.0中相当容易(注意:这在桌面GL中也是合法的,但在GL 3.1 core中删除了此功能。它仍然可以从兼容配置文件中访问)。必须获得每个颜色组件的位深度:

闪烁深度; glGetIntegerv(GL_x_深度和位深度)

其中x是红色、
绿色
蓝色
阿尔法
中的一种


有了位深度后,可以测试它是否为565,并使用适当的像素传输参数和颜色值。

glReadPixels的
格式
参数必须是GL_RGBA(始终受支持)或
GL_实现_颜色_读取_格式
(在不同的设备上不同)。这是OpenGL ES限制。

glReadPixels的
格式
参数必须是GL_RGBA(始终支持)或
GL_实现_COLOR_READ_format_OES
(在不同设备上不同)。这是一个OpenGL ES限制