gpt4 book ai didi

c - 整个窗口的 glReadPixels (OpenGL)

转载 作者:行者123 更新时间:2023-11-30 16:51:28 26 4
gpt4 key购买 nike

我想在 OpenGL 上保存窗口的所有 RGB 值。并想将值检查为“int”(因为我必须使用它)我尝试使用 for 循环按每个像素保存它,并且它有效。但是,如果我尝试 glReadpixels 一次,它无法检查。有什么问题吗?

这段代码有效。 (正确保存像素RGB,我可以使用cout检查它)

int width = 50;
int height = 50;
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
unsigned char pick_col[3];
glReadPixels(j , i , 1 , 1 , GL_RGB , GL_UNSIGNED_BYTE , pick_col);
cout << (int)pick_col[0] << " " << (int)pick_col[1] << " " << (int)pick_col[2] << endl;
}
}

但是这段代码不起作用。 (像素数组中有奇怪的值。有几个值是正确的)

GLubyte pixelarray[width*height*3]; 
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixelarray);

for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
cout << (int)pixelarray[i*width*3 + j*3] << " " (int)pixelarray[i*width*3 + j*3 +1] << " " << (int)pixelarray[i*width*3 + j*3+2] << endl;
}
cout << endl;
}

最佳答案

我解决了问题。它应该是GL_RGBA和4 channel 数组

GLubyte pixelarray[width*height*4]; 
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixelarray);

for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
cout << (int)pixelarray[i*width*4 + j*4] << " " (int)pixelarray[i*width*4 + j*4 +1] << " " << (int)pixelarray[i*width*4 + j*4+2] << endl;
}
cout << endl;
}

关于c - 整个窗口的 glReadPixels (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41784493/

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