glReadPixels没有更新值
问题描述:
glReadPixels在我画一个点时没有更新。glReadPixels没有更新值
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
printf("after coloring %d %d %d\n", (int)pixel[0], (int)pixel[1] , (int)pixel[2]);
的pixel[0]
,pixel[1]
和pixel[2]
的值出来为零,其中作为期望值是255, 0, 0
。帮我解决此问题:)
答
这可能是由于一些问题
-
模型NDC空间变换没有设置产生1:从顶点坐标像素位置
1映射 你曾尝试建立这种转变,但你的点在相邻像素结束了,由于舍入误差,因为OpenGL的像素中心是一种直观(它们是有意义的,数学)
读取缓冲区未设置为你绘制到缓冲区(glDrawBuffer,glReadBuffer)
安置自己的完整的代码,我们能够再现,并进一步帮助您。
答
我没有看到所有的代码,但我认为可能的问题是,你的x和y这是一个浮点值在这里glVertex2f(x,y);
x和y小于1但glReadPixels
与int参数一起工作并且在从float转换为int如果想要使用真实像素坐标,您可以使用glOrtho
(更多信息,请参阅here),例如对于窗口高度= 500和宽度= 500,我们需要读取信息的像素坐标值不正确。 500:
void Display(void) {
glClear(GL_COLOR_BUFFER_BIT);
//Rectangles();
glMatrixMode(GL_PROJECTION);
glOrtho(0, 500, 0, 500, -1, 1);
// Restore the default matrix mode
glColor3f(1.0f, 0.0f, 0.0f);
float x = 50, y = 50;
unsigned char pixel[3];
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
glMatrixMode(GL_MODELVIEW);
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
printf("after coloring %d %d %d\n", (int)pixel[0], (int)pixel[1] , (int)pixel[2]);
glFlush();
}
您能否显示像素的类型? – lnman
像素应该是咬的类型你确定你的声明中有正确的类型吗? –
你确定你的'x,y'对应屏幕'(0,0)'?记住变换矩阵......屏幕左上角是图像原点,那么您的点在那里呈现? – Spektre