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;

0

Решение

Я случайно инвертировал свое значение Y, просто зафиксировав его инвертированием на плоскости. например (ScreenWidth-mouse_y)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]