Получить цвет определенного пикселя в текстуре OpenGL? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь получить цвет определенного пикселя из определенной текстуры, используя OpenGL (C ++).Я смотрю на glGetTexImage(), так как это выглядит как то, что я хочу, но я не могу понять контекст, в котором я должен поместить это.Я ошибся?Это не должен быть самый быстрый вариант, так как это не кадр за кадром;только когда игра запускается.

Текстура не будет отображаться на экране, а просто используется как способ получения информации.Я использую следующую функцию для загрузки текстуры.

GLuint TextureUtil::loadTexture(const char* filename, int* widthVar, int* heightVar) {
        unsigned char* image = SOIL_load_image(filename, widthVar, heightVar, NULL, SOIL_LOAD_RGBA);

        GLuint texture;
        glGenTextures(1, &texture);
        glBindTexture(GL_TEXTURE_2D, texture);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);


        if (image) {
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, *widthVar, *heightVar, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
            glGenerateMipmap(GL_TEXTURE_2D);
        } else {
            std::cout << "ERROR: TextureUtil.cpp - Texture loading failed." << std::endl;
        }

        glActiveTexture(0);
        glBindTexture(GL_TEXTURE_2D, 0);
        SOIL_free_image_data(image);

        return texture;
    }

1 Ответ

0 голосов
/ 30 января 2019

Если вас интересует пиксель в столбце координат x и строке y, тогда:

unsigned char* image = SOIL_load_image(filename, widthVar, heightVar, NULL, SOIL_LOAD_RGBA);
int width = *widthVar;

unsigned char* pixel = image + y * width * 4 + x * 4;

unsigned char red = pixel[0];
unsigned char green = pixel[1];
unsigned char blue = pixel[2];
unsigned char alpha = pixel[3];

Проверка ошибок функции SOIL_load_image оставлена ​​на ваше усмотрение.Я бы полностью ожидал, что он вернет nullptr, если имя файла не существует, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...