我在opengl空间中画了一些三维的直线和圆盘的图形,然后用双缓存做成动画的形式。
现在我想获得这些图形二维屏幕坐标,包括屏幕上每个象素点坐标和颜色信息的获取。
我用glReadBuffer(GL_FRONT)和glReadPixel(x,y,width,height,GL_RGB,GL_GL_UNSIGNED_BYTE),但总是无法运行。
我用上面的方法对二维图形做同样的处理,但是读出来的颜色信息没有变化.
请问是什么原因,怎么解决?

解决方案 »

  1.   

    http://blog.csdn.net/yqxx/archive/2005/05/27/382551.aspx
      

  2.   

    关于opengl工作流程的书我都看过,大体也明白,我就是按照它的流程写的程序,就是实现不了我想要的结果
      

  3.   

    void CImageDlg::OnReDrawOpengl() 
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();
    glColor3f(1,0,0); 
    glPushMatrix();
    for(int i=0;i<5;i++)//每一帧所画的图形
    {
    glBegin(GL_LINE_STRIP);   
    glVertex2f(wingCoor[number][i][0][0],wingCoor[number][i][0][1]);
    glVertex2f(wingCoor[number][i][1][0],wingCoor[number][i][1][1]);
    glVertex2f(wingCoor[number][i][2][0],wingCoor[number][i][2][1]);
    glVertex2f(wingCoor[number][i][3][0],wingCoor[number][i][3][1]);
    glVertex2f(wingCoor[number][i][4][0],wingCoor[number][i][4][1]);
    glEnd();
    }
    glPopMatrix();
    SwapBuffers(::wglGetCurrentDC());
    }
    void CImageDlg::OnTimer(UINT nIDEvent) //实现动画效果
    {
    if (number<100)
    {
              OnReDrawOpengl();
    imageValue();
    }
    else
    {
    mFrame=100;
    number=0;
    }
    number+=1;//帧数
    CDialog::OnTimer(nIDEvent);
    }
    void CImageDlg::imageValue()//&para;&Aacute;&Egrave;&iexcl;&Iuml;&ntilde;&Euml;&Oslash;&Ouml;&micro;
    {
    BYTE image[480][640][3];//视口的宽为640,高为480
      glReadBuffer(GL_FRONT);//
    glReadPixels(0,0,640,480,GL_RGB,GL_UNSIGNED_BYTE,image);
    ofstream out("data2.txt");
    for(int i=0;i<480;i++)
    {
    for(int j=0;j<640;j++)
    {
    out<<image[i][j][0]<<"   ";
    }
    }
    }
    以上是我的部分代码,请问流程有问题吗?
    最后的输出值都为255
      

  4.   

    我怎么找不到你这个函数阿
    msdn上也没有
      

  5.   

    抱歉,是我写错了,应该是:
    wglmakecurrent函数。
      

  6.   

    syy64(太平洋) :
    不行呀
    查了半天资料,还是不知道怎么用阿
    再帮帮我吧
      

  7.   

    好像是参数问题;试试看glReadPixels(0,480,640,480,GL_RGB,GL_UNSIGNED_BYTE,image);