簡體   English   中英

獲取OpenGL紋理中特定像素的顏色?

[英]Get colour of specific pixel in an OpenGL texture?

我正在嘗試使用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;
    }

假設您對坐標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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM