glReadPixels正在从错误的位置读取

时间:2014-02-06 07:41:25

标签: c++ opengl sdl glreadpixels

我正在尝试读取屏幕上绘制的矩形的颜色,但是当我尝试从坐标读取时,它似乎从偏移读取它但是这个偏移不一致。 (我正在使用SDL2库以防万一)我发现它正在反转坐标,例如如果y为0,则实际上是y_Max。

我需要知道如何从正确的坐标读取像素,我不关心我使用的是哪种方法,但更快的方法是最佳的。

我不完全理解这里抛出的所有代码,我对图像很新,但我知道我在这里投射了我的项目矩阵,

    glEnable(GL_TEXTURE_2D);

    GLuint texture;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, image->format->BytesPerPixel, image->w, image->h, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);

    glOrtho(0.0f, 640.0f, 480.0f, 0.0f, -1.0f, 1.0f);

然后在这里我画了我的矩形。

glColor3f(Chrome[0], Chrome[1], Chrome[2]);
glTranslatef(0, 0, 0.0f);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x*128.0f, 0, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(128.0f*x+128, 0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(128.0f*x+128, 128.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x*128.0f, 128.0f, 0.0f);
glEnd();
glPopMatrix();
                                    unsigned        char pixel[3];
glReadPixels(5, 5, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
std::cout << "R: " << (int)pixel[0] << std::endl;
std::cout << "G: " << (int)pixel[1] << std::endl;
std::cout << "B: " << (int)pixel[2] << std::endl;
std::cout << "X: "  << std::endl;
std::cout << "Y: "  << std::endl;
std::cout << std::endl;

1 个答案:

答案 0 :(得分:2)

我意外地反转了我的Y值,只是通过在飞机上反转来固定。例如(ScreenWidth-mouse_y)