gpt4 book ai didi

c++ - 获取 OpenGL 纹理中特定像素的颜色?

转载 作者:行者123 更新时间:2023-11-28 01:24:38 24 4
gpt4 key购买 nike

我正在尝试使用 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。

关于c++ - 获取 OpenGL 纹理中特定像素的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com