2010-10-07 90 views
3

我想弄清楚如何从所选像素中提取RGB值。每次点击它,它都会给我一个0的值,即使我点击一个彩色的三角形。查找像素颜色

void mouse(int button, int state, int x, int y) { 
    if(state == GLUT_DOWN) { 
     float mx = p2w_x(x); // pixel to world coordinates 
     float my = p2w_y(y); 
     float rgb[3]; 
     glReadPixels(mx, my, 1, 1, GL_RGB, GL_FLOAT, rgb); 
     std::cout << rgb[0] << std::endl; // prints 0 for red always 
    } 
} 

回答

4

我不认为你应该将像素坐标转换为世界坐标。我不知道GL,但它对我来说看起来不对。你从鼠标右边获得像素坐标?并且您想要一个像素颜色值,from the framebuffer

也许你也可以使用整数类型来表示颜色值,用GL_UNSIGNED_BYTE和unsigned char rgb[3];来代替。并使用GL_RGB8格式,而不是简单的GL_RGB。

另请参阅如何设置帧缓冲区的pixel format (store)。这将影响随后的glReadPixels调用。

+0

没错,使用屏幕缓冲区坐标。 – alxx 2010-10-07 09:46:26