【问题标题】:glReadPixel pixel colorglReadPixel 像素颜色
【发布时间】:2012-12-18 00:33:32
【问题描述】:
void render(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_QUADS);
glColor3f( 0, 255, 0 ); //color it green
glVertex3f( -100, 0,  100  );
glVertex3f( -100, 0, -100  );
glVertex3f( 100,  0, -100 );
glVertex3f( 100,  0, 100 );
glEnd();

int tmpx, tmpy;
GLint pixel_color[3];
SDL_GetMouseState(&tmpx, &tmpy);

glReadPixels(tmpx, win_width - tmpy, 1, 1, GL_RGB, GL_INT , &pixel_color[0]);
printf("PIXEL: %d - %d - %d\n", pixel_color[0], pixel_color[1], pixel_color[2]);

SDL_GL_SwapBuffers();
}

使用上面的渲染代码,我试图获取鼠标指向的像素的 rgb 颜色。平面颜色为全绿色 (255),但 glReadPixels 返回的值是 2147483647 而不是 255。

我已经尝试过更改类型,但它从未返回我预期的值。如何让它返回 glColor 设置的相同值?

【问题讨论】:

    标签: opengl sdl


    【解决方案1】:

    改变

    GLint pixel_color[3];
    

    GLubyte pixel_color[3];
    

    改变

    glReadPixels(tmpx, win_width - tmpy, 1, 1, GL_RGB, GL_INT , &pixel_color[0]);
    

    glReadPixels(tmpx, win_width - tmpy, 1, 1, GL_RGB, GL_UNSIGNED_BYTE , &pixel_color[0]);
    

    【讨论】:

    • 谢谢,但是,它只返回 0 或 255。我想要得到的是在 glColor() 中设置的完全相同的值。就像我将绿色设置为 175 一样,我也会在 glReadPixels 返回的像素颜色中得到 175。那可能吗?怎么样?
    • 正如你所描述的那样对我有用,不知道为什么它不起作用:/
    • @markuz:glColor3f 将给定值钳制在 [0;1] 范围内。您想改用 glColor3b。
    • 或者,使用 glColor3f(0/255.0,175/255.0,0/255.0); =)
    • @JariKomppa 做到了! :) 谢谢。但是,我不明白:p,如果你没问题,你能解释一下为什么需要将它除以 255 吗?
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2014-02-28
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多