获取 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。
相关文章:
- 如何在24位SDL_Surface上设置像素的颜色
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 无法获取窗口 C++ 的像素颜色
- 如何使用stb_image将像素颜色数据写入 BMP 图像文件?
- 从SDL_Texture访问像素颜色
- 结构像素颜色值
- 将OpenCV中的像素颜色映射到预定的颜色列表中
- magick 获得像素颜色.PixelPacket似乎不再存在了
- 在数组中设置像素颜色
- 在 openCV 中更改单个像素颜色
- 获取图像的像素颜色
- 使用 BMP 作为高度图.如何访问像素颜色以设置高度
- 以最快的方式获取像素颜色
- glsl-获取像素颜色[像素着色器]
- 如何访问位图中的像素颜色
- 快板定义像素颜色
- 使用像素颜色的人工神经网络
- 使用magick++获取像素颜色
- FreeImage:获取像素颜色
- 从指定坐标[x, y]处的位图数据获取像素颜色